Choon Yew Chiu
Lamden World
Published in
13 min readJan 22, 2019

--

去中心化世界中的智慧合約透明度

智慧合約正在開始引進點對點交易與活動的一個新時代。在許多關於智慧合約和它的無需信任的性質的文字中,我們驗證這些智慧合約可以做到其作者宣稱的方向會是簡單的嗎?

在一個去中心化的設置中,信任程度是必然而非假設性的。所以當一個開放者,顧客或是一項事業嘗試去和智慧合約溝通的時候,您如何開始對一切都絕對信任呢?

在這領域中主要是用以太鏈的合約語言 Solidity 作為大部分平台的主要智慧合約語言。以下是在以太區塊鏈上 一個智慧合約的寫法外觀

60806040526aa56fa5b99019a5c800000060035534801561001f57600080fd5b50600354600160a060020a0333166000908152602081905260409020819055600255610874806100506000396000f3006080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063095ea7b31461014857806318160ddd1461018057806323b872dd146101a75780632ff2e9dc146101d1578063313ce567146101e6578063661884631461021157806370a082311461023557806395d89b4114610256578063a9059cbb1461026b578063d73dd6231461028f578063dd62ed3e146102b3575b600080fd5b3480156100ca57600080fd5b506100d36102da565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016c600160a060020a0360043516602435610311565b604080519115158252519081900360200190f35b34801561018c57600080fd5b5061019561037b565b60408051918252519081900360200190f35b3480156101b357600080fd5b5061016c600160a060020a0360043581169060243516604435610381565b3480156101dd57600080fd5b506101956104ff565b3480156101f257600080fd5b506101fb610505565b6040805160ff9092168252519081900360200190f35b34801561021d57600080fd5b5061016c600160a060020a036004351660243561050a565b34801561024157600080fd5b50610195600160a060020a0360043516610602565b34801561026257600080fd5b506100d361061d565b34801561027757600080fd5b5061016c600160a060020a0360043516602435610654565b34801561029b57600080fd5b5061016c600160a060020a036004351660243561074b565b3480156102bf57600080fd5b50610195600160a060020a03600435811690602435166107ed565b60408051808201909152600881527f547275654465636b000000000000000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a0383166000908152602081905260408120548211156103a657600080fd5b600160a060020a03808516600090815260016020908152604080832033909416835292905220548211156103d957600080fd5b600160a060020a03831615156103ee57600080fd5b600160a060020a038416600090815260208190526040902054610417908363ffffffff61081816565b600160a060020a03808616600090815260208190526040808220939093559085168152205461044c908363ffffffff61082f16565b600160a060020a0380851660009081526020818152604080832094909455878316825260018152838220339093168252919091522054610492908363ffffffff61081816565b600160a060020a038086166000818152600160209081526040808320338616845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b60035481565b601281565b600160a060020a03338116600090815260016020908152604080832093861683529290529081205480831061056657600160a060020a03338116600090815260016020908152604080832093881683529290529081205561059d565b610576818463ffffffff61081816565b600160a060020a033381166000908152600160209081526040808320938916835292905220555b600160a060020a0333811660008181526001602090815260408083209489168084529482529182902054825190815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b600160a060020a031660009081526020819052604090205490565b60408051808201909152600381527f5444500000000000000000000000000000000000000000000000000000000000602082015281565b600160a060020a03331660009081526020819052604081205482111561067957600080fd5b600160a060020a038316151561068e57600080fd5b600160a060020a0333166000908152602081905260409020546106b7908363ffffffff61081816565b600160a060020a0333811660009081526020819052604080822093909355908516815220546106ec908363ffffffff61082f16565b600160a060020a03808516600081815260208181526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350600192915050565b600160a060020a033381166000908152600160209081526040808320938616835292905290812054610783908363ffffffff61082f16565b600160a060020a0333811660008181526001602090815260408083209489168084529482529182902085905581519485529051929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000808383111561082857600080fd5b5050900390565b60008282018381101561084157600080fd5b93925050505600a165627a7a72305820b7bda2c17bde120610d8756414d5e5ff698ab33fd555b18576ba4cdf45ac80bb0029

我讓你用滑鼠往下滑的用意是讓您思考:「這是什麼東西?我看這些東西的用意在哪裡?」如果你考量到這些事情,那就抓到我的重點了。

不曉得您是否猜到這是 Truedeck 平台上抓下來的合約? 那是一個期待博弈行業使用並信任它來使用為網路博弈平台程式的項目。即使您猜到它是什麼,你也沒有辦法去破解它的意思。

在 2018 年 12 月底,lamden.io 推出它的混沌網 「AnarchyNet」。它是一個名為 「Cilantro」的區塊鏈構造的初步部署。混沌網也啟用了一種基於 Python 程式語言的「Seneca」智慧合約語言。

現在讓我們看一下 Cilantro 如何儲存 Seneca 智慧合約吧:

{“code_str”:”@export\ndef balance_of(wallet_id):\n. # print(\”wallet {} has balannce {}\”.format(wallet_id, balances[wallet_id]))\n. return balances[wallet_id]\n\n@export\ndef transfer(to, amount):\n. balances = hmap(‘balances’, str, int)\n. # print(\”transfering from {} to {} with amount {}\”.format(rt[‘sender’], to, amount))\n. balances[rt[‘sender’]] -= amount\n. balances[to] += amount\n. sender_balance = balances[rt[‘sender’]]\n\n. assert sender_balance >= 0, \”Sender balance must be non-negative!!! {}, {}, {}, {}, {}\”\\\n. .format(rt[‘sender’], sender_balance, to, amount, balances.rep_str)\n\n@export\ndef approve(spender, amount):\n. allowed[rt[‘sender’]][spender] = amount\n\n\n@export\ndef transfer_from(_from, to, amount):\n. assert allowed[_from][rt[‘sender’]] >= amount\n. assert balances[_from] >= amount\n\n. allowed[_from][rt[‘sender’]] -= amount\n. balances[_from] -= amount\n. balances[to] += amount}

你可以從混沌網區塊鏈提供這個合約的應用程式介面中看到整個合約內容。

我不準備在這裡討論智慧合約的長度所以我只選擇了其中一小部分合約內容。每一條 Seneca 合約都用原始 Python 程式語言儲存。為了讓我們更為明瞭,我們在 Python集成開放環境中抄錄下來並使用 ‘新線’字符(“\n”)來將它格式化。

非常清爽!是吧

作為一名開放者或者是審核者,這合約很直接了當的告知我它的用途是什麼。任何人可以開始在幾分鐘內看完這個程式並驗證它。

直到今天,相撲選手在開始比賽前都用展示雙掌顯示他們沒有攜帶武器作為雙方第一手信任度的展現。隨著我們的前進,一個快速簡單的第一手方式來驗證智慧合約讓我們更容易去推廣我們迫切需要的區塊鏈生態。

--

--