我正在使用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; ?? !!
我如何使用已经由松露部署的智能合约的地址?
答案 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);