Transactions

是否可以將多個單獨的交易連結成一個“全有或全無”交易?

  • June 29, 2016

假設我與一堆單獨的財產簽訂了契約。例如,person帶有 afirstNamelastName欄位的 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);
   }
}

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