[英]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.