Cryptography

使用 Web3j 載入智能合約,我如何指定我的憑據?

  • February 23, 2018

我正在使用 Web3j 庫為我的 Solidity 合約生成 Java 包裝器,我已經將契約部署到區塊鏈並且它已經被探勘,我現在想使用 java 包裝器在 java 中載入契約。

java 包裝器是 SimpleStorage,Web3j 生成了以下方法簽名用於載入合約;

   public static SimpleStorage load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
   return new SimpleStorage(contractAddress, web3j, credentials, gasPrice, gasLimit);
}

public static SimpleStorage load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
   return new SimpleStorage(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
}

我如何提供 Credentials 對象?我有我在區塊鏈上部署合約的節點的公鑰、私鑰和地址,但是 Credentials 對象採用 ECKeyPair,它期望私鑰和公鑰是 BigInteger,但是我的密鑰只是任意字元串人物。

有什麼我想念的嗎?

為了更清楚一點,我有以下內容;

String publicKey String privateKey String 地址

而且我要

憑證 憑證

傳遞給 load 方法,但 Credentials 只需要

   public static Credentials create(String privateKey, String publicKey) {
   return create(new ECKeyPair(Numeric.toBigInt(privateKey), Numeric.toBigInt(publicKey)));
}

我的公鑰和私鑰失敗的地方,因為它們無法轉換為 BigInt

如果您有一個普通的公鑰和私鑰,要生成憑證,您需要將它們轉換為十六進製表示,然後將它們傳遞給憑證的建構子

String hexPrivateKey = String.format("%040x", new BigInteger(1, privateKey.getBytes()));
String hexPublicKey = String.format("%040x", new BigInteger(1, publicKey.getBytes()));  
Credentials creds = Credentials.create(hexPrivateKey, hexPublicKey);

其中 publicKey 和 privateKey 是包含您的普通 pub 和 priv 密鑰的字元串

引用自:https://ethereum.stackexchange.com/questions/25490