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