Go-Ethereum

使用 web3j (Java) 解碼交易輸入數據

  • January 15, 2021

我的案例如下:我想要一個守護程序來監控使用者如何與我的智能合約進行互動。我看到它的方式是查看傳入的塊並嘗試使用與我的合約相對應的地址來解碼輸入數據。我無法在 web3J 中找到解碼數據的方法。

1- web3J 有什麼方法可以解碼數據嗎?

2-除了解碼輸入數據之外,我還有其他方法可以實現我的目標嗎?在我看來,事件是一個艱難的選擇,因為我無法輕鬆監控每一件事。而且這種方法不適用於我不擁有的智能合約。

謝謝您的幫助。

我猜是第一個問題。如果你看一下交易是什麼,對於一個節點來說它只是一個很大的長字節字元串。如果字節可轉換為 ASCII,則可以使用

web3.toAscii()

這可能會給你一些東西,也可能不會。例如,這是我在 Ropsten 上所做的一個 tx a,您可以在其中獲取一些可讀的輸入數據和一些不可讀的數據: https://ropsten.etherscan.io/tx/0xe4058b8f612f20600d8aae1230d93b7b5c63398ddde0a3a6aed236659f425c0e(只需點擊底部的輸入轉換為 Ascii )

也就是說,最好(最簡單)的方法是擁有 dapp。因此,當他們填寫表格時,您只需保存輸入數據。你說的下一個最好的方法是使用事件。它們很煩人,但您可能在契約開始時只有一個長事件:

   contract Test {
      event Input(string desc, address _party, uint _input1, string _input2);  

    function somefunc(uint _input1, string _input2) returns(bool success){
       Input("Input",msg.sender,_input1,_input2);
     return true;
  }
}

但是對於其他人的契約,您很不走運,因為您沒有此事件。

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