Solidity

您可以使用智能合約“實例”而不是部署每個新合約嗎?

  • September 21, 2021

對於這個菜鳥問題,我提前道歉,我認為一個場景可能是最好的提問方式:

我有一個簡單的託管智能合約,可以促進產品的購買。為簡單起見,合約部署在 0x01… 並且有 3 種方法:

deposit() payable - 僅限買家

shippedItem()- 僅限賣家

finalize()- 僅限買家

以及充當線上商店的簡單 Web 界面。

使用者 1 來到商店並通過存入智能合約購買產品。賣方將商品標記為已發貨,部署的契約狀態變為“等待最終確定”。

使用者 2 來到商店並通過…購買產品我不是 100% 確定如何?是否需要為該使用者部署新合約?或者有沒有辦法讓契約“實例”可以作為獨立對象創建和互動?前任:

--> Deployed contract at 0x01...

        --> Instance 1   State: awaiting finalization
        --> Instance 2   State: awaiting deposit 

我確實看到了一個與此類似的問題,說您可以使用所謂的庫來獲得這種行為,但我仍然不確定契約庫是否適合這種情況。我之所以這樣問,是因為從實際業務的角度來看,讓買方或賣方每次都部署一個新合約似乎最終在主網上會變得非常昂貴。感謝您查看我的問題。

我認為通過更好的契約設計可以更好地處理。您可以使用一個定義託管交易的結構,而不是一一處理買賣交易變數。就像是:

struct escrowTx {
 uint256 TransactionID;
 address Seller;
 address Buyer;
 bool Executed;
 ...
}

然後,每個託管交易只是該對象的一個新實例,智能合約在其生命週期內對其進行管理。那麼只需要一份契約。

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