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

Interacting a smart contract from Java application

我正在与 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

我的问题是:如何为 "credentials" 使用 testrpc 帐户??!!

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

how I can use testrpc accounts for "credentials"??!!

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

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

示例:

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

有了私钥,就可以生成public密钥。有几个 有关如何执行此操作的在线示例。有关使用 web3j 的示例,请参阅 here for a JS example or here(这会创建一个新的密钥对,但您应该能够重用它)。

使用 public 和私钥,您现在可以创建 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);

How I can use the address of the smart contract which already deployed by truffle??

你没有 deploy 合同,你 load 有合同。来自 web3j docs:

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