1

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

要与智能合约交互,我们需要: 1- 连接到本地主机 2- 有一个帐户来发送交易(凭证)。3-部署合约并获取地址(使用truffle部署到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 帐户用于“凭据”??!!

如何使用已经被 truffle 部署的智能合约的地址?

4

1 回答 1

2

我如何将 testrpc 帐户用于“凭据”??!!

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

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

例子:

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

使用私钥,您可以生成公钥。网上有几个例子说明如何做到这一点。请参阅此处获取 JS 示例或此处获取使用 web3j 的示例(这会创建一个新的密钥对,但您应该能够重用它)。

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

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);

如何使用已经被 truffle 部署的智能合约的地址?

你不是deploy合同,你load是合同。来自web3j 文档

YourSmartContract contract = YourSmartContract.load(
        "0x<address>|<ensName>", <web3j>, <credentials>, GAS_PRICE, GAS_LIMIT);
于 2018-02-14T18:09:13.620 回答