本 合約 以紐約實驗性的能源微電網為例,作為一個簡單的案例進行實現。
“在總統大道的一邊,五戶家庭通過太陽能板發電;在街道的另一邊的五戶家庭可以購買對面家庭不需要的電力。而連接這項交易的就是區塊鏈網絡,幾乎不需要人員參與就可以管理記錄交易。”但是這個想法是非常有潛力的,能夠代表未來社區管理能源系統。”
布魯克林微電網開發商 LO3 創始人 Lawrence Orsini 說:
“我們正在這條街道上建立一個可再生電力市場,來測試人們對於購買彼此手中的電力是否感興趣。如果你在很遠的地方生產能源,運輸途中會有很多損耗,你也得不到這電力價值。但是如果你就在街對面,你就能高效的利用能源。”
在某一塊區域內存在一個能源微電網,每一戶家庭可能為生產者也可能為消費者。部分家庭擁有太陽能電池板,太陽能電池板的剩餘電量為可以售出的電力的值,為了簡化,單位為1.需要電力的家庭可以向有足夠餘額的電力的家庭購買電力。
賬戶私鑰應該由安裝在本地的客戶端生成,本例中為了簡便,使用模擬私鑰和公鑰。每位用戶的私鑰為guid+“1”,公鑰為guid+“2”。簽名方式簡化為私鑰+"1"
在該智能合約中暫時只有一種角色,為每一戶家庭用戶。
- 家庭用戶
- 賬戶地址
- 剩餘能量 //部分家庭沒有太陽能電池板,值為0
- 賬戶餘額(電子貨幣)
- 編號
- 狀態 //0:不可購買, 1:可以購買
- 賬戶公鑰
- 賬戶私鑰
- 交易(一筆交易必須同時具有賣方和買方的公鑰簽名,方能承認這筆交易。公鑰簽名生成規則,公鑰+待創建交易的ID號,在本交易類型中,只要買家有足夠的貨幣,賣家自動會對交易進行簽名)
- 購買方地址
- 銷售方地址
- 電量銷售量
- 電量交易金額
- 編號
- 交易時間
-
init
初始化操作 -
invoke
調用合約內部的函數 -
query
查詢相關的信息 -
createUser
創建新用戶,並加入到能源微網中 invoke -
buyByAddress
向某一位用戶購買一定量的電力 invoke -
getTransactionById
通過id獲取交易內容 query -
getTransactions
獲取交易(如果交易數大於10,獲取前10個) query -
getHomes
獲取用戶(如果用戶數大於10,獲取前10個) query -
getHomeByAddress
通過地址獲取用戶 query -
changeStatus
某一位用戶修改自身的狀態 invoke -
writeUser
將新用戶寫入到鍵值對中 -
writeTransaction
記錄交易
createUser
request參數:
args[0] 剩餘能量值
args[1] 剩餘金額
response參數:
新建家庭用戶的json表示
buyByAddress
request參數:
args[0] 賣家的賬戶地址
args[1] 買家簽名
args[2] 買家的賬戶地址
args[3] 想要購買的電量數值
response參數:
購買成功的話返回該transaction的json串。
購買失敗返回error
getTransactionById
request參數:
args[0] 交易編號
response參數:
查詢結果的transaction 交易表示
getTransactions
request參數:
none
response參數:
獲取所有的交易列表(如果交易大於10,則返回前10個)
getHomeByAddress
request參數
args[0] address
response參數
用戶信息的json表示
getHomes
response參數
獲取所有的用戶列表(如果用戶個數大於10,則返回前10個)
changeStatus
request參數:
args[0] 賬戶地址
args[1] 賬戶簽名
args[2] 對自己的賬戶進行的操作,0:設置為不可購買 1:設置狀態為可購買
response參數:
修改後的用戶信息json表示