900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 以太坊java_Java调用以太坊智能合约

以太坊java_Java调用以太坊智能合约

时间:2022-08-07 18:59:58

相关推荐

以太坊java_Java调用以太坊智能合约

Web3j让Java开发者可以轻松地访问以太坊区块链并调用区块链上的智能合约的方法,今天我们将学习如何创建一个简单的命令行应用来访问区块链上的合约。

1、什么是web3j

Web3j是一个开发包,你可以利用这个开发包快速实现对以太坊/Quorum节点的访问,同时也可以用它为某个智能合约文件生成对应的java封装类,以便在Java应用中调用。

系统学习web3j开发,推荐汇智网的在线互动教程:《Web3j以太坊开发详解》

2、节点安装与智能合约部署

首先我们需要搭建一个以太坊网络并部署智能合约,你可以参考这个repo,按照README说明搭建并部署智能合约。

要调用以太坊链上的合约,我们需要两个东西:钱包私钥

合约地址

在区块链领域,账号通常称为钱包,不过这是一个比较混乱的词语,有时钱包指的是单一地址,有时又指的是包含多个地址的容器。在本文中,一个钱包指的是单一的以太坊地址,

ganache在启动时会列出10个钱包地址以及其对应的私钥。例如:(0)11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63

(1)7cb8f9f70eac9aca70b514a9a8ebd36a3c2c4a9d28dc9534d6042914ed814161

(…)

在这个教程中,我们将使用0#地址,即:11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63

部署好的合约也类似:2_deploy_contracts.js

=====================

Deploying‘SimpleStorage’

————————->transactionhash:0x18f4dffba426a2cd63bddf5b8741f0708729515d178d59df0b2a43c5aa85e646>Blocks:0Seconds:0>contractaddress:0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795>account:0x169C8C361e1CC394C3FFefa52FcaB91704cde2b2>balance:99.99147618(…)

在上面的输出中,注意contract address部分,表示合约的部署地址,即:contract-address:0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795

3、智能合约相关工具安装

我们首先需要安装solidity智能合约编译器:$npminstall-gsolc

然后从这里下载web3j命令行工具,解压并设置PATH环境变量,以便可以在任何目录调用。

4、合约的java封装类

首先编译合约并生成java封装类:$solc.sol–bin–abi–optimize-o/$web3jsoliditygenerate-b/path/to/.bin\

-a/path/to/.abi\

-o/path/to/src/main/java\

-anisation.name

5、在Java代码中调用合约

现在我们可以调用合约了:publicclassApp{//changecontract-address

privatestaticStringcontractAddress=contract-address;//mainmethod

publicstaticvoidmain(String[]args){//instantiateweb3j

Web3jweb3=Web3j.build(new

HttpService("http://localhost:9545/"));

Credentialscredentials=Credentials.create(wallet-address);//instantiatethecontract

SimpleStoragecontract=SimpleStorage.load(

contractAddress,web3,credentials,newDefaultGasProvider()

);//sayhello

System.out.println("Welcome"+credentials.getAddress());//interactwiththecontract

try{

BigIntegercurrentValue;//getvalue

currentValue=contract.get().send();

System.out.println(currentValue.toString());//changevalue

contract.set(newBigInteger("1")).send();//getvalue

currentValue=contract.get().send();

System.out.println(currentValue.toString());

}catch(Exceptione){

e.printStackTrace();

}

}

}

上面的代码首先用节点URL来初始化Web3j实例,然后使用钱包地址私钥创建一个账户身份凭证对象,并使用合约地址初始化合约,最后调用合约的方法。

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