簡體   English   中英

是否可以僅通過轉換地址來調用合同功能

[英]Is it possible to call a contract function just by making a transction to a address

目前,我正在嘗試學習以太坊和智能合約。 我讀了本教程: Dapps,對於初學者來說,我現在想知道的是,是否每次都要從合約中調用一個函數(如上一教程中所述),或者當我將一些以太坊轉移到一個特定的函數時,是否有可能執行特定的函數?那個合同地址?

示例:我執行下面的代碼,並且接收方地址也是帶有合同的地址。 現在應在接收器功能處執行一個特定功能。

eth.sendTransaction({from:sender,to:receiver,value:amount})

您應該在智能合約中創建一個無名的應付功能。

如果有人在您合同的地址發送原始交易,那么它將成為默認執行的功能。

function() payable public {

}

另外,這里的另一個答案指出您需要了解合同ABI才能與合同進行通信,但這不是事實。

您需要知道合同地址,函數名稱以及輸入和輸出參數類型。 (您可以使用Web3的method.call或method.sendTransaction來發送交易對象中的編碼數據並與合同進行交互。)

ABI可能具有此信息,但是ABI本身不是必需的。

僅當您知道應用程序二進制接口 ABI時,才可以與合同進行通信。

通常,ABI是兩個程序模塊之間的接口,其中一個通常位於機器代碼級別。 該接口是用於將數據編碼/解碼為機器代碼的實際方法。 在以太坊中,從根本上講,這是您可以為EVM編碼實體合同的方式,以及向后如何從事務中讀取數據的方式。

如果您擁有合同的JSON ABI,則仍然必須確定是否要進行呼叫或交易。 通話和交易之間的區別如下:

  • 交易由您的客戶創建,簽名並廣播到網絡。 他們最終將例如通過操縱智能合約中的余額或價值來改變區塊鏈的狀態。
  • 呼叫僅在您的計算機上本地執行,而不會廣播到網絡,例如, 試運行

呼叫對於調試智能合約非常有用,因為它們無需支付交易費或汽油費。

因此,如果僅在不使用任何接口的情況下將交易發送到合同,則將無法執行合同上的任何代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM