Contract-Development

使用 web3 JavaScript API 呼叫合約函式時出現未擷取的類型錯誤?

  • June 1, 2017

我寫了一份契約來註冊一個名字。例如,其中一個函式將名稱作為字元串輸入,然後輸出有關名稱註冊的資訊(名稱、註冊人、該名稱的上次更新時間、註冊 ID 以及目前是否已註冊)。我可以很好地在 Truffle 控制台中呼叫該函式,但是在使用 web3 JavaScript API 呼叫相同的函式時不斷收到 Uncaught TypeError ,我不知道為什麼。

這是 Truffle 控制台中的樣子:

圖 1(松露)

當我嘗試在 Chrome 中的 JavaScript 控制台中呼叫相同的函式時(使用 React 開發前端),我收到了這個錯誤,我不確定為什麼:

inpage.js:7928 Uncaught TypeError: Cannot read property 'match' of undefined

這是一張圖片,顯示了我正在呼叫的錯誤函式:

圖 2(JavaScript 控制台)

nameRegContract 對像是這樣創建的,以供參考:

var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var nameRegABI = [... ABI ...];
var nameRegAddress = '0x23fa6b40bdf47a6a41feb62077dab84213daa624';
var nameRegContract = web3.eth.contract(nameRegABI).at(nameRegAddress);

想知道是否有人知道我為什麼會收到此錯誤/我是否錯誤地使用了 web3 JavaScript API?

在評論中感謝Gawey的回答。問題是我在 JavaScript 控制台中使用了錯誤的 ABI 來創建合約對象。為了獲得正確的 ABI,我進入了 Truffle 創建的編譯合約文件,並從那裡複製了 ABI。為了得到不正確的 ABI,我使用了 Truffle 控制台並輸入了 contractName.ABI,這給了我所有的合約函式,但是,ABI 沒有指定每個函式的輸入和輸出,這導致了 TypeError。

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