Solidity

有沒有辦法動態創建指向先前契約的契約?

  • April 2, 2022

我想實現一個跟踪系統..我跟踪在他們之間傳遞物品的兩方之間的事件..然後接收者將其傳遞給另一個人等等……

我想同時為每筆交易(每兩次交易之間)創建一個合約,我希望仍然能夠跟踪所有鏈..發起人和之前的合約…

有沒有辦法做到這一點?

前言:如果你想使用 web3 來創建互動,以下應該可以工作:

如果您.deploy()在通過 web3 構造的合約上使用該方法,它應該返回地址 onreceipt和實例本身 on confirmation

myContract.deploy({
 data: '0x12345...',
 arguments: [123, 'My String']
})
.send({
 from: '0x1234567890123456789012345678901234567891', // owner address
 gas: 1500000,
 gasPrice: '30000000000000'
}, function(error, transactionHash){ ... })
.on('error', function(error){ ... })
.on('transactionHash', function(transactionHash){ ... })
.on('receipt', function(receipt){
 console.log(receipt.contractAddress) // contains the new contract address
})
.on('confirmation', function(confirmationNumber, receipt){ ... })
.then(function(newContractInstance){
 console.log(newContractInstance.options.address) // instance with the new contract address
})

來源:https ://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#deploy

讓我們澄清一些概念性的事情。

我想為每筆交易創建一份契約

不太可能。交易不是契約。一些交易部署合約,因為這是它們的目的,而其他交易與合約互動。我能想到的最接近的關聯可能是記錄某種類型的交易文件的契約。這可能是一個處理類的所有實例的契約。

跟踪在他們之間傳遞物品的兩方之間的事件

在這裡,該語言的解包有點挑戰性,因為“事件”在乙太坊中具有非常特定的含義,“交易”和“合約”也是如此。我將這樣解釋它以減少混淆:

“跟踪參與產品傳遞的兩方之間的互動。”

讓我們打開包裝。

**產品:**某種在契約中有代表的物理對象。這可能最好保存在儲存產品資訊和可能其他資訊的單個契約中。在您喜歡的情況下,這可能最好被視為(邏輯)表中的行或類的實例。從這裡開始:https ://medium.com/robhitchens/solidity-crud-part-1-824ffa69509a或這裡:Solidity 是否有解決良好且簡單的儲存模式?

**參與傳遞的各方:**這意味著有一個業務流程,其步驟以某種方式流動。如果沒有更好的案例描述,假設雙方必須簽字,然後所有權轉移,也就是傳遞。

這個過程(無論它是什麼)正是契約的目的。契約可以保存產品資訊,包括所有權,並執行嚴格限制所有權轉移方式的流程。

合約可以與其他合約對話。因此,產品契約強制執行的轉移過程可能會受到傳遞服務等簽字的約束。考慮兩個開始行動的“批准人”,一些託管數據以指示對下一步具有權威性的傳遞公司,以及結束所有權轉讓的傳遞確認。

在這種情況下,有一個單一的產品契約,人們可以查閱它來發現任何產品實例的狀態/所有權以及發生在它身上的事情的歷史。

希望能幫助到你。

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