0

我是区块链开发的新手。目前,我正在学习以太坊平台,这听起来是一个非常好的开始环境。我在我的 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();
    }

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

主要问题是from参数是硬编码的(我是从 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();
    }

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

4

1 回答 1

0

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

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

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

当你连接到你的节点时,它会自动检测地址

于 2018-01-19T18:35:53.457 回答