本篇内容介绍了“Java如何调用以太坊智能合约”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Web3j是一个开发包,你可以利用这个开发包快速实现对以太坊/Quorum节点的访问,同时也可以用它为某个智能合约文件生成对应的java封装类,以便在Java应用中调用。
系统学习web3j开发,推荐汇智网的在线互动教程:《Web3j以太坊开发详解》
首先我们需要搭建一个以太坊网络并部署智能合约,你可以参考这个repo,按照README说明搭建并部署智能合约。
要调用以太坊链上的合约,我们需要两个东西:
钱包私钥
合约地址
在区块链领域,账号通常称为钱包,不过这是一个比较混乱的词语,有时钱包指的是单一地址,有时又指的是包含多个地址的容器。在本文中,一个钱包指的是单一的以太坊地址,
ganache在启动时会列出10个钱包地址以及其对应的私钥。例如:
(0) 11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63 (1) 7cb8f9f70eac9aca70b514a9a8ebd36a3c2c4a9d28dc9534d6042914ed814161 (…)
在这个教程中,我们将使用0#地址,即:
11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63
部署好的合约也类似:
2_deploy_contracts.js ===================== Deploying ‘SimpleStorage’ ————————- > transaction hash: 0x18f4dffba426a2cd63bddf5b8741f0708729515d178d59df0b2a43c5aa85e646 > Blocks: 0 Seconds: 0 > contract address: 0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795 > account: 0x169C8C361e1CC394C3FFefa52FcaB91704cde2b2 > balance: 99.99147618 (…)
在上面的输出中,注意contract address
部分,表示合约的部署地址,即:
contract-address: 0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795
我们首先需要安装solidity智能合约编译器:
$ npm install -g solc
然后从这里下载web3j命令行工具,解压并设置PATH环境变量,以便可以在任何目录调用。
首先编译合约并生成java封装类:
$ solc <smart-contract>.sol –bin –abi –optimize -o <output-dir>/ $ web3j solidity generate -b /path/to/<smart-contract>.bin \ -a /path/to/<smart-contract>.abi \ -o /path/to/src/main/java \ -p com.your.organisation.name
现在我们可以调用合约了:
public class App { // change contract-address private static String contractAddress = contract-address; // main method public static void main(String[] args) { // instantiate web3j Web3j web3 = Web3j.build(new HttpService("http://localhost:9545/")); Credentials credentials = Credentials.create(wallet-address); // instantiate the contract SimpleStorage contract = SimpleStorage.load( contractAddress, web3, credentials, new DefaultGasProvider() ); // say hello System.out.println("Welcome " + credentials.getAddress()); // interact with the contract try { BigInteger currentValue; // get value currentValue = contract.get().send(); System.out.println(currentValue.toString()); // change value contract.set(new BigInteger("1")).send(); // get value currentValue = contract.get().send(); System.out.println(currentValue.toString()); } catch (Exception e) { e.printStackTrace(); } } }
上面的代码首先用节点URL来初始化Web3j实例,然后使用钱包地址私钥创建一个账户身份凭证对象,并使用合约地址初始化合约,最后调用合约的方法。
“Java如何调用以太坊智能合约”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。