Ethereumj
從其他節點創建的節點訪問合約成員值的方法
我有一個具有 getter 和 setter 方法的契約程式碼。
我寫了一個java主類,它完成了以下操作
TransactionReceipt receipt = sendTxAndWait(new byte[0], Hex.decode(metadata.bin)); byte[] contractAddress = receipt.getTransaction().getContractAddress(); CallTransaction.Contract contract = new CallTransaction.Contract(metadata.abi); CallTransaction.Function inc = contract.getByName("set"); byte[] functionCallBytes = inc.encode(123); TransactionReceipt receipt1 = sendTxAndWait(contractAddress, functionCallBytes);
另一類具有以下內容:
TransactionReceipt receipt = sendTxAndWait(new byte[0], Hex.decode(metadata.bin)); byte[] contractAddress = receipt.getTransaction().getContractAddress(); CallTransaction.Contract contract = new CallTransaction.Contract(metadata.abi); ProgramResult r = ethereum.callConstantFunction(Hex.toHexString(contractAddress), contract.getByName("get")); Object[] ret = contract.getByName("get").decodeResult(r.getHReturn()); System.out.println("Current contract data member value: " + ret[0]); ProgramResult r1 = ethereum.callConstantFunction("823555f52655029e4269ccc8de2bf5d5b83936a8", contract.getByName("get")); Object[] ret1 = contract.getByName("get").decodeResult(r1.getHReturn()); System.out.println("Executed contract data member value: " + ret1[0]);**
這兩個執行在兩個不同的 JVM 中。現在執行第二個程序給我如下輸出:目前合約數據成員值:0 執行的合約數據成員值:123
現在這個“ 823555f52655029e4269ccc8de2bf5d5b83936a8 ”是第一個java類創建合約時解析的合約地址。
是不是這樣,每個想要訪問合約成員值的節點都應該知道合約地址。或者有沒有其他方法可以訪問 ethereumj 客戶端中的契約成員價值?
目前,除了通過地址之外,沒有其他方法可以引用契約。這甚至不是 EthereumJ 的問題,而是它適用於整個 Ethereum 合約世界的方式。
將智能合約地址與 IP 地址進行比較。它們都是機器可讀和可理解的,但人類不容易獲得。因此你的不確定性。
通常,人類將通過 Mist 瀏覽器、Metamask 或 web3js 與智能合約在 Web 界面上進行互動。這意味著他們不需要知道合約地址,因為它被編碼到網頁中。話雖如此,我認為合約的域命名服務很有用,這樣做的智能合約肯定是原型的。