主页 > tp钱包和imtoken钱包通用吗 > Java 如何调用以太坊智能合约

Java 如何调用以太坊智能合约

tp钱包和imtoken钱包通用吗 2023-08-18 05:08:50

本文介绍“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’
————————-
> transaction hash:   0x18f4dffba426a2cd63bddf5b8741f0708729515d178d59df0b2a43c5aa85e646
> Blocks: 0           Seconds: 0
> contract address:   0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795
> account:             0x169C8C361e1CC394C3FFefa52FcaB91704cde2b2
> balance:             99.99147618
(…)

如何购买以太坊

在上面的输出中,注意合约地址部分,它表示合约的部署地址,即:

contract-address: 0x3C4c39bd5a928bc19A981c85A00543EEB9f7C795

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

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

如何购买以太坊

$ npm install -g solc

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

4、合约的java包装类

首先编译合约并生成java包装类:

如何购买以太坊

$ solc .sol –bin –abi –optimize -o /
$ web3j solidity generate -b /path/to/.bin \
        -a /path/to/.abi \
        -o /path/to/src/main/java \
        -p com.your.organisation.name

5、在 Java 代码中调用合约

现在我们可以调用合约:

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 如何调用以太坊智能合约》就到这里,感谢阅读。想了解更多行业相关知识,可以关注易速云网站,小编将为大家输出更多优质实用文章!