Solidity智慧合約演練系列第3部分

買賣虛擬貨幣
這是智慧合約演練系列的第3部分。在下面文章中,區塊鏈研究實驗室將為您提供關於我們的業務合作伙伴智慧合約的技術實施細節的深入概述。商業夥伴關係用例:兩個使用者(或業務合作伙伴)可以透過簽署合同建立合作關係一旦合同簽訂,雙方將獲得以下特權:1. 在智慧合約中增加資金的權利。2. 將資金從智慧合約轉移到第三方的權利。3. 建議一個專案在他們之間共享,分配百分比。(兩個合作伙伴的分配之和應為100%)
4. 批准提議的專案。一旦專案得到雙方合作伙伴的批准,它將被提交到區塊鏈和分配細節。5. 刪除一個專案。一旦合作伙伴雙方都同意刪除某個專案,該專案將在區塊鏈上標記為已刪除。6. 打破合夥關係的權利。一旦合夥人雙方同意分割,上述權利將不再適用於任何一方。智慧合約中儲存的資金也將在其中平均分配。讓我們開始…

以下是我們定義的資料結構:

我們將儲存兩個合作伙伴(partnerOne和partnerTwo)的地址。兩個布林標誌(signed和separated)將跟蹤夥伴關係的狀態。這兩個對映(具有hasSeparated和hasSigned)都將儲存合作伙伴關於其合夥關係或分離的批准。Item struct將幫助我們儲存要在合作伙伴之間共享的專案及其各自的份額百分比。Items陣列將儲存專案列表。ItemIds陣列將儲存專案的索引。

在確認區塊鏈上的各種交易時將觸發的事件

我們將在智慧合約部署期間(在建構函式中)初始化兩個使用者的錢包地址(一旦他們簽署合約,他們將來將成為合作伙伴)。我們還將使用諸如onlyPartner,isSigned和areNotSeparated之類的修飾符來限制各種智慧合約函式。

signContract方法將允許兩個使用者都簽署合約。雙方都簽署了合約後,智慧合約的狀態將變為合夥(透過將已簽名標記標記為true)。

注:可以從智慧合約external 呼叫指定為外部的方法。要在智慧合約內呼叫它,請使用this關鍵字(this.externalMethodName()),可以在智慧合約外部或內部呼叫指定為public的方法。Internal 方法只能在內部呼叫。Private 方法在衍生智慧合約中將不可用。

proposalItem將使兩個合作伙伴都可以提議要在它們之間共享的任何專案。只有在以下情況下,此交易才能成功:

· 兩個使用者都是合夥人(signed= true)。
· 每個合作伙伴的股份應為非負數,總股份總數應等於100%。

proposalItem方法還將標記已提議該專案的使用者批准的專案(item.hasApprovedAdd [msg.sender] = true)。然後將其儲存在items列表中,並將其索引保留在itemIds陣列中。

approveItem將接受一個itemId,以便從列表中確定要批准的專案。在發件人批准之前,它將驗證是否已新增,刪除或較早批准了該物品。一旦兩個夥伴都批准了該專案,則將其標記為已新增。

RemoveItem將接受itemId,以確定要刪除的專案。一旦雙方同意,該專案將被標記為已刪除。

Note- address.send()和address.transfer()方法是安全的,因為它們將23000gas轉發到外部呼叫,這僅足以記錄某些內容。而address.value.call(msg.value)()是不安全的,因為它將完整的氣體轉發給外部呼叫,使智慧合約容易受到駭客攻擊。

匿名付款方式將允許合作伙伴將資金儲存在智慧合約中。付款方式將使他們能夠將任何資金轉移給第三方。

注—匿名回退功能可能在其他任何功能之後被呼叫。如果必須僅將其用於事務處理(純以太坊傳輸),則應驗證msg.data.length == 0(最佳實踐)。

getSeparated允許兩個合夥人都申請終止合夥關係。如果雙方都同意分割,則合約將終止合夥關係。不允許他們在區塊鏈上進行任何其他交易。同樣,智慧合約中儲存的所有資金也將在其中平均分配。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;