100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 区块链 xuperchain xuper-java-sdk 部署使用EVM 合约 教程

区块链 xuperchain xuper-java-sdk 部署使用EVM 合约 教程

时间:2019-01-10 19:57:15

相关推荐

区块链 xuperchain xuper-java-sdk 部署使用EVM 合约 教程

本文在另外一台非区块链节点的机器独立部署xuper-java-sdk 。

一、准备

1. 创建合约账户

参考教程

区块链 xuperchain 命令行 部署使用EVM 合约 教程https://shijianfeng./article/details/117440574

2. 配置区块链使用evm

参考教程

区块链 xuperchain 命令行 部署使用EVM 合约 教程https://shijianfeng./article/details/117440574

3. 将在区块链节点里创建的合约账户的信息拷贝到xuper-java-sdk所在的机器

在节点机器

scp -r ./data/keys shijianfeng@192.168.92.133:~/xuper/xuper-java-sdk/

在xuper-java-sdk机器

4. 将在区块链节点里编译好的智能合约sol、abi、bin文件拷贝到xuper-java-sdk所在的机器

在节点机器

在xuper-java-sdk机器

二、xuper-java-sdk

1. 下载源代码

/xuperchain/xuper-java-sdk

2. 添加依赖

如果你使用的是Maven,只需要添加下面的依赖到pom.xml

<dependency><groupId>com.baidu.xuper</groupId><artifactId>xuper-java-sdk</artifactId><version>0.2.0</version></dependency>

3. 创建客户端

# 区块链节点的ipXuperClient client = new XuperClient("192.168.92.129:37101");

4. 导入合约账户的keys

// Import account from local keysAccount account = Account.create("./keys");// 设置之前已经创建的合约账号account.setContractAccount("XC1111111111111111@xuper");

5. 部署evm合约

String abi = "[{\"inputs\":[{\"internalType\":\"uint256\"......";String bin = "6080604......";// 初始化合约传入的参数,若没有则传空Map<String, String> args = new HashMap<>();args.put("num", "5889");Transaction t = client.deployEVMContract(account, bin.getBytes(), abi.getBytes(), contractName, args);System.out.println("txID:" + t.getTxid());

6. 合约调用

// storagepay is a payable method. Amount param can be NULL if there is no need to transfer to the contract.Transaction t1 = xuperClient.invokeEVMContract(account, contractName, "storepay", args, BigInteger.ONE);System.out.println("txID:" + t1.getTxid());System.out.println("tx gas:" + t1.getGasUsed());Transaction t2 = xuperClient.queryEVMContract(account, contractName, "retrieve", null);System.out.println("tx res getMessage:" + t2.getContractResponse().getMessage());System.out.println("tx res getBodyStr:" + t2.getContractResponse().getBodyStr());

xuperClient代码位于371行

/xuperchain/xuper-java-sdk/blob/master/src/main/java/com/baidu/xuper/api/XuperClient.java

各参数解释

/**

* @param from the initiator of calling method.

* @param contract contract name.

* @param method contract method.

* @param args contract method args.

* @param amount amount of transfer to contract when call payable method.

* @return transaction.

*/

public Transaction invokeEVMContract(Account from, String contract, String method, Map<String, String> args, BigInteger amount)

7. 完整代码参考

import com.baidu.xuper.api.Account;import com.baidu.xuper.api.Transaction;import com.baidu.xuper.api.XuperClient;import java.math.BigInteger;import java.util.HashMap;import java.util.Map;public class TestCase {public static void main(String[] as) {XuperClient client = new XuperClient("192.168.92.129:37101");Account account = Account.create("./keys");account.setContractAccount("XC1111111111111111@xuper");String abi = "[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"increase\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}]\n";String bin = "608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103d4806100606000396000f3fe6080604052600436106100345760003560e01c8063693ec85e14610039578063893d20e814610115578063ae896c871461016c575b600080fd5b34801561004557600080fd5b506100ff6004803603602081101561005c57600080fd5b810190808035906020019064010000000081111561007957600080fd5b836020811561008b57600080fd5b803590602001918460018302840111640100000000831117156100ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f86905080830192505050505050509192919290505050610227565b6040518082815260200191505060405180910390f35b34801561012157600080fd5b5061012a61029a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102256004803603602081101561018257600080fd5b810190808035906020019064010000000081111561019f57600080fd5b83602081156101b157600080fd5b803590602001918460018302840111640100000000831117156101d357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f869050808301925050505050505091929192905050506102c3565b005b60006001826040518082805190602001908083835b6020831061025f57805182526020815060208101905060208303925061023c565b600183606101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600180826040518082805190602001908083835b602083106102fa5780518252602081506020810190506020830392506102d7565b600183606101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902054016001826040518082805190602001908083835b60208310610365578051825260208150602081019050602083039250610342565b600183606101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055505056fea265627a7a72315820c49614e9b0c57d73536ec4ffc169642345d796bb1e70a1f16a63746c6e165cad64736f6c63430005100032";System.out.println(account.getContractAccount() == null);Transaction t = client.deployEVMContract(account, bin.getBytes(), abi.getBytes(), "Counter", null);System.out.println("txID:" + t.getTxid());Map<String, String> args = new HashMap<>();args.put("key", "lili");// storagepay is a payable method. Amount param can be NULL if there is no need to transfer to the contract.Transaction t1 = client.invokeEVMContract(account, "Counter", "increase", args, BigInteger.ONE);System.out.println("txID:" + t1.getTxid());System.out.println("tx gas:" + t1.getGasUsed());Transaction t2 = client.queryEVMContract(account, "Counter", "get", args);System.out.println("tx res getMessage:" + t2.getContractResponse().getMessage());System.out.println("tx res getBodyStr:" + t2.getContractResponse().getBodyStr());}}

执行截图

参考

/xuperchain/xuper-java-sdk

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。