Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deployWasmContract的时候报错 #49

Open
hubin858130 opened this issue Jun 20, 2022 · 14 comments
Open

deployWasmContract的时候报错 #49

hubin858130 opened this issue Jun 20, 2022 · 14 comments

Comments

@hubin858130
Copy link

image
能查询到account里面还有98万,account也关联了合约账号,在这里推那个xrc01资产管理合约的时候报错:
image
maven引入的0.3.0,麻烦大佬帮我看看是什么问题?

@superlitian
Copy link

本地的链吗? 还是开放网络? XRC01合约有过修改吗?

@hubin858130
Copy link
Author

本地的链吗? 还是开放网络? XRC01合约有过修改吗?

开放网络,39.156.69.83:37100,xrc01的合约没有动过,就是那个example/xrc01里面的,我只编译了一下。

@hubin858130
Copy link
Author

本地的链吗? 还是开放网络? XRC01合约有过修改吗?

开放网络,39.156.69.83:37100,xrc01的合约没有动过,就是那个example/xrc01里面的,我只编译了一下。

另外大佬能不能把你们编译好的xcr01.wasm丢一个出来,我试试看是什么现象,看是不是我编译的文件有问题。

@superlitian
Copy link

是按照这个文档使用xdev 编译的就没问题:https://xuper.baidu.com/n/xuperdoc/advanced_usage/contract_management.html#wasm
另外如果重新编译还是不行,可以贴一下完整的代码

@hubin858130
Copy link
Author

对的,就是这个文档,另外我还用了文档里面的命令行去发布,但是也报了问题:
huqb01@SH-huqb01-3 bin % ./xchain-cli wasm deploy --account XC9791514561575675@xuper -a '{"creator":"XC9791514561575675@xuper"}' --cname counter counter.wasm -H 39.156.69.83:37100
PreExe contract response : rpc error: code = Unknown desc = Mehotd deployContract not exists in xkernel, logid:1655767269_2841316541005826

@superlitian
Copy link

开放网络不能用cli做set相关操作,使用SDK吧,贴一下完整的操作流程和代码,看下是哪里的问题

@hubin858130
Copy link
Author

开放网络不能用cli做set相关操作,使用SDK吧,贴一下完整的操作流程和代码,看下是哪里的问题

private static String contractAccount = "XC9791514561575675@xuper";

public static void main(String[] args) {
    boolean ret = initConf();
    if (ret) {
        //user addr:
        System.out.println("init success,AKaddr:"+account.getAKAddress()+",addr:"+account.getAddress());
        //user balance:
        BigInteger balance = xuperClient.getBalance(account.getAKAddress());
        System.out.println("balance:"+balance);

        //部署合约,只需要部署一次:
        deployWasmContract();
    }
}

public static boolean initConf() {
    try {
        File directory = new File("");
        //规范路径:getCanonicalPath()方法返回绝对路径
        String rootCanonicalPath = directory.getCanonicalPath();
        //绝对路径:getAbsolutePath()方法返回文件的绝对路径,如果创建的时候使用的绝对路径返回绝对路径,创建的时候使用的相对路径,返回相对路径
        rootAbsolutePath = directory.getAbsolutePath();
        String confPath = rootAbsolutePath+"/src/main/resources/key/sdk.yaml";
        Config.setConfigPath(confPath);
        xuperClient = new XuperClient("39.156.69.83:37100");
        String privateKey = rootCanonicalPath+"/src/main/resources/key";//不用加private.key
        account = Account.getAccountFromFile(privateKey,secritStr);
        //添加合约账户
        account.setContractAccount(contractAccount);
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }

    return false;
}

public static boolean deployWasmContract() {
    boolean ret = false;
    try {
        Map<String, byte[]> args = new HashMap<>();
        args.put("creator", contractAccount.getBytes());
        String codePath = rootAbsolutePath + "/src/main/resources/key/doujnft.wasm";
        byte[] code = Files.readAllBytes(Paths.get(codePath));
        // the runtime is c
        Transaction tx = xuperClient.deployWasmContract(account, code, "xrc01", "c", args);
        if (tx != null) {
            long gasUsed = tx.getGasUsed();
            String txid = tx.getTxid();
            ContractResponse response = tx.getContractResponse();
            int status = response.getStatus();
            String mess = response.getMessage();
            String body = response.getBodyStr();
            System.out.println("gasUsed:"+gasUsed+",txid:"+txid+",status:"+status+",mess:"+mess+",body:"+body);
            System.out.println("debugPrint:"+tx.debugPrint());
            return true;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return ret;
}

@hubin858130
Copy link
Author

开放网络不能用cli做set相关操作,使用SDK吧,贴一下完整的操作流程和代码,看下是哪里的问题

private static String contractAccount = "XC9791514561575675@xuper";

public static void main(String[] args) {
    boolean ret = initConf();
    if (ret) {
        //user addr:
        System.out.println("init success,AKaddr:"+account.getAKAddress()+",addr:"+account.getAddress());
        //user balance:
        BigInteger balance = xuperClient.getBalance(account.getAKAddress());
        System.out.println("balance:"+balance);

        //部署合约,只需要部署一次:
        deployWasmContract();
    }
}

public static boolean initConf() {
    try {
        File directory = new File("");
        //规范路径:getCanonicalPath()方法返回绝对路径
        String rootCanonicalPath = directory.getCanonicalPath();
        //绝对路径:getAbsolutePath()方法返回文件的绝对路径,如果创建的时候使用的绝对路径返回绝对路径,创建的时候使用的相对路径,返回相对路径
        rootAbsolutePath = directory.getAbsolutePath();
        String confPath = rootAbsolutePath+"/src/main/resources/key/sdk.yaml";
        Config.setConfigPath(confPath);
        xuperClient = new XuperClient("39.156.69.83:37100");
        String privateKey = rootCanonicalPath+"/src/main/resources/key";//不用加private.key
        account = Account.getAccountFromFile(privateKey,secritStr);
        //添加合约账户
        account.setContractAccount(contractAccount);
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }

    return false;
}

public static boolean deployWasmContract() {
    boolean ret = false;
    try {
        Map<String, byte[]> args = new HashMap<>();
        args.put("creator", contractAccount.getBytes());
        String codePath = rootAbsolutePath + "/src/main/resources/key/doujnft.wasm";
        byte[] code = Files.readAllBytes(Paths.get(codePath));
        // the runtime is c
        Transaction tx = xuperClient.deployWasmContract(account, code, "xrc01", "c", args);
        if (tx != null) {
            long gasUsed = tx.getGasUsed();
            String txid = tx.getTxid();
            ContractResponse response = tx.getContractResponse();
            int status = response.getStatus();
            String mess = response.getMessage();
            String body = response.getBodyStr();
            System.out.println("gasUsed:"+gasUsed+",txid:"+txid+",status:"+status+",mess:"+mess+",body:"+body);
            System.out.println("debugPrint:"+tx.debugPrint());
            return true;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return ret;
}

endorseServiceHost: "39.156.69.83:37100"
complianceCheck:

是否需要进行合规性背书

isNeedComplianceCheck: true

是否需要支付合规性背书费用

isNeedComplianceCheckFee: true

合规性背书费用

complianceCheckEndorseServiceFee: 400

支付合规性背书费用的收款地址

complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT

如果通过合规性检查,签发认证签名的地址

complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 3

@hubin858130
Copy link
Author

开放网络不能用cli做set相关操作,使用SDK吧,贴一下完整的操作流程和代码,看下是哪里的问题

我这个代码流程上有问题吗?还是说可能是wasm有问题呢?

@hubin858130
Copy link
Author

开放网络不能用cli做set相关操作,使用SDK吧,贴一下完整的操作流程和代码,看下是哪里的问题

我这个代码流程上有问题吗?还是说可能是wasm有问题呢?
另外我刚又推了一个counter.wasm发现是可以上链的,难道真的是xrc01上链有问题?

@superlitian
Copy link

我这个代码流程上有问题吗?还是说可能是wasm有问题呢?
另外我刚又推了一个counter.wasm发现是可以上链的,难道真的是xrc01上链有问题?
我确认一下xrc01 是否存在问题,有进展回复你

@superlitian
Copy link

方便提供以下信息吗:

  • xdev 版本/代码分支
  • contract-sdk-cpp 版本/代码分支
  • 操作系统信息

@hubin858130
Copy link
Author

方便提供以下信息吗:

  • xdev 版本/代码分支
  • contract-sdk-cpp 版本/代码分支
  • 操作系统信息

编译wasm的机器为:
xdev-1.1.0
contract-sdk-cpp-main 直接git clone 的应该是最新的master版本
系统是macOS Big Sur 11.5.2
docker desktop 4.8.2
go1.17 darwin/amd64

调用xuper-Java-sdk的机器为macOs Catalina 10.15.7

另外:
在用xdev编译xrc01的时候有一个报错,我修改了一下xdev的一个参数,后来编译成功,具体见xuperchain/contract-sdk-cpp#43

@superlitian
Copy link

好的,辛苦用这一份xrc01的代码编译部署试下,在这里可以找到:

  1. 打开xuper.baidu.com,登录工作台
  2. 合约管理--> 合约市场 --> 数字积分管理合约 --> 复用模板创建合约
  3. 创建合约之后可在在线的xuperide中编辑合约,
  4. 可直接在线编写然后部署至开放网络,也可将模板中的合约代码copy至本地进行编写编译
  5. 关于此issues所涉及的问题,会持续跟进至修复

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants