Web3j新帐户与testrpc进行交易

时间:2017-06-16 06:13:09

标签: android blockchain ethereum web3-java

我是区块链开发的新手。目前,我正在学习以太坊平台,这听起来是一个非常好的环境。我在我的Android应用程序上测试了web3j库,它运行正常。我使用以下代码连接到我的testrpc节点:

Web3j web3 = Web3jFactory.build(new HttpService("http://192.168.1.108:8545"));
 BigInteger gasPrice = BigInteger.valueOf(20000000000L);
    BigInteger gasLimit = BigInteger.valueOf(500000L);
    BigInteger nonce = null;


    String contractAddress="0x0dd3b0efbce5c4eba2dc9b8500ecafb0b1cec28f";

    String from = "0x2d6fcee3c3435ebda9184bdddf8481a87b7d1948";
    List<Type> inputParameters = new ArrayList<>();
   String hash ="232131231232141231231231231232123123123";
     byte[] b =Arrays.copyOfRange(new BigInteger(hash, 16).toByteArray(), 1, 33);

    Type _telNumber = new Bytes32(b);
    Type _publicKey = new Bytes32(b);
    inputParameters.add(_telNumber);
    inputParameters.add(_publicKey);
    Function function = new Function("addPerson",
            inputParameters,
            Collections.<TypeReference<?>>emptyList());
    String functionEncoder = FunctionEncoder.encode(function);



    Transaction transaction = Transaction.createFunctionCallTransaction(from, nonce,gasPrice,gasLimit,contractAddress,new BigInteger("0"), functionEncoder);

    try {
        EthSendTransaction transactionResponse = web3.ethSendTransaction(transaction).sendAsync().get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

以上代码有效,我能够与智能合约互动(调用函数)。

主要问题是来自 参数的 是硬编码的(我是从testrpc帐户列表中获取的)。

我想要实现的目标:我想创建一个应用程序,用户可以在其中创建新的钱包(帐户),并使用它们与网络进行交易。我使用以下代码成功创建了钱包:

 String filePath = Environment.getExternalStorageDirectory().toString() + "/Pictures";


    Web3j web3 = Web3jFactory.build(new HttpService("http://192.168.1.108:8545"));
    Web3ClientVersion web3ClientVersion = null;

    try {
        String fileName = WalletUtils.generateNewWalletFile("your password",new File(filePath),false);
        Log.d("FILENAME",fileName);

        Credentials credentials = WalletUtils.loadCredentials(
                "your password",
                filePath+"/"+fileName);

        myAddress = credentials.getAddress();
        Log.d("My address",credentials.getAddress());

    } catch (CipherException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidAlgorithmParameterException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    }

下一步是什么?我应该将我的地址广播到网络吗?

1 个答案:

答案 0 :(得分:0)

  

主要问题是from参数是硬编码的(我是从testrpc帐户列表中得到的)。

您可以调用您的文件并对其进行解密以获取您的地址,每次创建新帐户时,您都会使用密钥生成文件。

val credentialsOne = WalletUtils.loadCredentials("your password", "your path")

当您与节点连接时,它会自动检测地址