Web3js

我可以使用 eth_sendTransaction 儲存隨機數據嗎?

  • May 9, 2022

根據文件web3.eth.sendTransaction和文件eth_sendTransaction

事務對象可以包含一個可選data參數,該參數應該是一個String,包括:

包含合約函式呼叫數據的 ABI 字節字元串,或者在合約創建交易的情況下是初始化程式碼。

我想知道以下內容:

  1. 我可以data用來儲存一個String我喜歡的值嗎?如:
web3.eth.sendTransaction({

 from,
 to,
 gas,
 gasPrice,
 data: 'I love lamp'

}, (error, transactionHash) => {

 web3.eth.getTransaction(transactionHash, (error, { input }){
   
   console.log(input) // should log 'I love lamp'
 
 })

})
  1. 如果答案是肯定的,這個字元串可以有多大(以字節為單位),如果gas費用根據 的大小增加data,我可以提前計算嗎?

感謝您的幫助

您可以儲存字元串,但編碼為十六進製字元串。要儲存“我愛燈”,您需要設置data: '0x49206c6f7665206c616d70'.

使用utf8ToHex將字元串轉換為十六進製字節 -

web3.utils.utf8ToHex('I have 100€');
> "0x49206861766520313030e282ac"

要知道它的成本是多少,請使用estimateGas,無論是在契約的方法上,還是在沒有的情況下。

web3.eth.estimateGas({
   to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe",
   data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003"
})
.then(console.log);

重新交易規模 -

在撰寫本文時,交易大小限制約為 780kB(約 300 萬天然氣)。

從這個答案中獲取的資訊。

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