Transactions
是否可以將多個單獨的交易連結成一個“全有或全無”交易?
假設我與一堆單獨的財產簽訂了契約。例如,
person
帶有 afirstName
和lastName
欄位的 a。dapp 的使用者想要更改這兩個欄位,這將需要兩個單獨的交易。
從使用者體驗的角度來看,這是有問題的,因為其中一個事務可能成功而另一個事務失敗,並且必須讓使用者意識到這一點。
當更改相互依賴時,這變得更加成問題。考慮一個使用者想要改變
firstName
一個人的 CONDITIONALlastName
改變。是否有可能將這些獨立的交易連結成一個單一的全有或全無交易?
在您給出的範例中,僅設計契約以便可以通過一次交易更新兩個欄位會更容易。例如,在偽 Solidity 中:
bytes32 firstName; bytes32 lastName; function setName(bytes32 first, bytes32 last) { firstName = first; lastName = last; }
帶有 setName 函式的事務不能部分執行。它將完全成功或完全失敗。
警告:使用 marty 合約可能會使您面臨 tx.origin 網路釣魚。請熟悉https://github.com/ethereum/solidity/issues/683
一種可能的解決方案是創建一份“烈士”契約,儘管很老套。這樣的合約將在其實例化程式碼中包含多個交易,後跟一個
selfdestruct
.contract PersonMartyr{ function PersonMartyr(){ var person = Person(0x..) person.setFirstName(...); person.setLastName(....); selfdestruct(msg.sender); } }