从Java应用程序交互智能合约

时间:2018-02-14 16:18:47

标签: java ethereum smartcontracts web3-java

我正在使用java应用程序与智能合约进行交互,我正在使用testrpc。

要与我们需要的智能合约互动:1-连接到本地主机 2-有一个帐户来发送交易(凭证)。 3-部署合同并获取地址(使用松露部署到testrpc网络并已有地址)

1- Web3j web3 = Web3j.build(new HttpService());  // defaults to http://localhost:8545/
2- Credentials credentials = WalletUtils.loadCredentials("password", "/path/to/walletfile");

3- YourSmartContract contract = YourSmartContract.deploy(
    <web3j>, <credentials>,
    GAS_PRICE, GAS_LIMIT,
    <initialEtherValue>,
    <param1>, ..., <paramN>).get();  // constructor params

我的问题是:我如何使用testrpc帐户获取&#34;凭证&#34; ?? !!

我如何使用已经由松露部署的智能合约的地址?

1 个答案:

答案 0 :(得分:2)

  

我如何使用testrpc帐户“凭证”?? !!

您需要私钥和公钥才能创建Credentials对象。 TestRPC在您启动时显示私钥。它们会在每次重新启动时更改,因此如果您希望将它们保持静态,则可以使用自己的私钥和--accounts选项指定初始帐户集。

格式:testrpc --account "<PRIVATE_KEY>,<STARTING_BALANCE_IN_WEI>"

示例:

testrpc --account "0x70f1384b24df3d2cdaca7974552ec28f055812ca5e4da7a0ccd0ac0f8a4a9b00,300000000000000000000" --account "0xad0352cfc09aa0128db4e135fcea276523c400163dcc762a11ecba29d5f0a34a,300000000000000000000"

使用私钥,您可以生成公钥。有几个 网上有关如何执行此操作的示例。有关JS示例,请参阅here;有关使用web3j的示例,请参阅here(这会创建一个新密钥对,但您应该可以重复使用它。)

使用公钥和私钥,您现在可以创建凭据对象:

import org.web3j.crypto.Credentials;
import org.web3j.crypto.ECKeyPair;
import org.web3j.utils.Numeric;

...

String privateKey = <YOUR_PRIVATE_KEY>;
String publicKey = <YOUR_PUBLIC_KEY>;

ECKeyPair keyPair = new ECKeyPair(Numeric.toBigInt(privateKey), Numeric.toBigInt(publicKey));

Credentials credentials = Credentials.create(keyPair);
  

我如何使用已经由松露部署的智能合约的地址?

您没有deploy合同,而是load合同。来自web3j docs

YourSmartContract contract = YourSmartContract.load(
        "0x<address>|<ensName>", <web3j>, <credentials>, GAS_PRICE, GAS_LIMIT);
相关问题