copyrightcontractdemo

17
智智智智智智智智智智

Upload: nicholas-lin

Post on 09-Jan-2017

103 views

Category:

Software


0 download

TRANSCRIPT

Page 1: CopyRightContractDemo

智慧合約應用於著作權

Page 2: CopyRightContractDemo

• 記錄著作權的 metadata (或 hash 值),不記錄完整的著作權• 交易流程均由合約(自動)強制執行,交易紀錄公開且完整

• 並非真的自動,仍需由外界啟動• 在合約之外的部分如法律訴訟、追討欠款等無強制力執行

Page 3: CopyRightContractDemo

三種類型 CONTRACT 簡介

CopyRightRecordMutisigVote CopyRight

主要的合約只有一份著作權的證明記錄每個交易合約的資訊

用於著作權擁有人投票的合約只有一份投票否決特定交易合約 etc.

交易合約和每個買家都建立一份記錄交易資訊

Page 4: CopyRightContractDemo

情況 1 開始交易

CopyRightRecord

CopyRightA

CopyRightB

CopyRightC

建立 copyright 合約

Page 5: CopyRightContractDemo

情況 1 開始交易

CopyRightRecord

CopyRightA

MutisigVote

呼叫

記錄更新資料

Page 6: CopyRightContractDemo

情況 1 開始交易

CopyRightRecord

CopyRightA

MutisigVote

呼叫

記錄更新資料

Page 7: CopyRightContractDemo

情況二 新夥伴

CopyRightRecordMutisigVote

著作權所有人

記錄更新資料

呼叫

Page 8: CopyRightContractDemo

情況三 收費

CopyRightRecordCopyRightA

著作權所有人著作權購買人

付款 呼叫合約

Page 9: CopyRightContractDemo

情況四 終止交易

CopyRightRecord CopyRightA

著作權所有人

中止交易

MutisigVote投票決定

呼叫

Page 10: CopyRightContractDemo

合約 code : https://github.com/NIC619/solPractice/blob/master/copyRight.sol

Page 11: CopyRightContractDemo

• Array in solidity : address[] owners;

• 類似固定陣列,但支援 push owners.push(address)

• delete : 將該位置的值變成 0 delete owners[2]

• 花 O(n) 維護 或著 每次都 loop 過包含被刪掉的整條陣列• public 屬性 :

• 一開始宣告的變數要加上 public 屬性才會顯示在 ABI ,才可以直接讀取其值uint public totalCount = 3;(in console) mycontract.totalCount(); //3

Page 12: CopyRightContractDemo

event

• return value 只有在• 1. 其他 function 會使用• 2. 在 console debug 時

• 才有用,否則是看不到回傳值的。那有些情況需要真的做出 transaction 並 broadcast 出去才能知道執行結果的該怎麼辦?• event

• 和 function 很像,但是只執行將傳入的參數寫入到鏈上的動作

Page 13: CopyRightContractDemo

event• event myrecord(address indexed _sender, uint indexed _amount, uint

indexed _currentTime)

function deposit() { … myrecord(msg.sender, msg.value, now);}

• 不可更改,永久記錄在鏈上• 有大小限制,超過會被丟 hash ,改存 hash 值• indexed 的屬性代表會被記錄在 logs 的 topics 裡,否則記錄在 data 裡

• 記錄在 topics 的值可以在 console 裡用 listerner 監聽, data 裡的無法• 最多三個

Page 14: CopyRightContractDemo

event• var myrecordEvent = myContract.myrecord({_sender:

someAddress});myrecordEvent.watch(function(err,result){ if(err){ console.log(err); return; } console.log(result.args._amount);})

Page 15: CopyRightContractDemo

console 指令• personal.unlockAccount(address)

• var xxxContract = eth.contract(ABI); // 建立 contract ABI

• var xxx = xxxContract.new(params,{from:address,data:’bytecode’,gas:gas_amount},function(err, contract){…}) // 部署 contract ,執行後會得到 Transaction hash 和 contract address

• miner.start() , miner.stop()

• var xxx = eth.contract(ABI).at(address)

• xxx.var1() // 在 console 顯示 var1 的值,前提是 var1 必須設為 public

• xxx.func1.call(params) // 本機跑 evm 模擬此 function 的執行,會顯示 function 裡的return value

• xxx.func1.sendTransaction(params, {from:address}) // 做成 transaction 並 broadcast

Page 16: CopyRightContractDemo

注意事項• 用 eth.getTransactionReceipt(“transaction hash”) 來得知

transaction 結果。如果有 error ,會發現 gas 全部都被吃掉;如果成功,會有 gasUsed 值顯示實際花了多少 gas 。• sendTransaction 的 gas 若不指定,則預設大約十萬左右,建議每次都設定一個夠大的數。 gas price 如果是 private net 則不必設定。• 小小心得: transaction broadcast 後如果沒成功執行,八成都是 gas不夠 ....... ,有時是網路延遲,可能 broadcast 出去但其他 peer 沒有收到,看一下 receipt 值,如果是 null 表示還沒完成。

Page 17: CopyRightContractDemo

合約各 function 的 Gas 花費• 建立 Copy Right Record 合約: 4992446

• 註冊新擁有權人: 123205

• 轉移擁有權: 112454

• 建立 Copy Right Contract 合約: 931138

• 計數 +1 : 26789

• 依計數付費: 43461

• 投票: 84963