摘要:星云計劃智能合約代碼入門卡酷少星云團隊已經發布了數個庫來幫助大家更容易編寫智能合約。參數級別參數級別參數級別參數級別參數別名如何調用合約以上就是與智能合約相關的內置功能模塊介紹。
星云計劃——智能合約代碼入門
卡酷少Wechat:13260325501
星云團隊已經發布了數個庫來幫助大家更容易編寫智能合約。這意味著我們不需要從頭開始來創建任何一個智能合約,節省了很多精力。但這些庫里面的內容我們需要逐個了解。
BigNumberBigNumber 模塊構建于 bignumber.js之上,用來處理任意精度的十進制和非十進制運算。合約可以直接使用BigNumber 來處理交易和其他轉賬操作中涉及到的數值計算。
var value = new BigNumber(0);//創建bigNumber對象 value.plus(1);//調用方法 …Storage
storage 模塊用來支持 Nebulas 上的數據持久化存儲。功能上類似于傳統的鍵值存儲系統。存儲不是免費的,需要消耗一定的 GAS。LocalContractStorage 是可以直接在合約中使用的內置storage對象,可存儲的數據類型包括數字、字符串和 JavaScript 對象(需要序列化為字符串,JSON轉譯)。鏈上數據只能被存儲它們的合約訪問和修改,也就是自己的合約地址只能調用和修改自己合約里的內容。
基礎LocalContractStorage 支持三個操作:
set,實現存儲功能,類似于put
get,實現讀取功能
del,實現刪除數據功能
“use strict”; var BankVaultContract = function () { // 無內容 }; BankVaultContract.prototype = {//prototype里有三個方法:get,set,delete init: function() { // 無內容 }, set: function(name, value) { //set,存儲數據 // 以下“增查刪”操作都以name=”robin”, value=10000為例 //LocalContractStorage一個封裝包,“.set”是帶哦用set方法 LocalContractStorage.set(“name”, name); // put 操作相當于 set LocalContractStorage.put(“value”, value); }, get: function() {//get,獲取數據 var name = LocalContractStorage.get(“name”); console.log(name); // 打印 ‘robin’ var value = LocalContractStorage.get(“value”); console.log(value); // 打印 ‘10000’ }, del: function() {//del,刪除 var result = LocalContractStorage.del(“name”); console.log(result); // 打印 ‘robin’ // delete 操作相當于 del result = LocalContractStorage.delete(“value”); console.log(result); // 打印 ‘10000’ // 刪除操作之后數據就不能被讀取 } }; module.exports = BankVaultContract;Blockchain
Blockchain模塊用來獲取當前正在執行的合約內的交易和區塊信息。另外,還提供了幾個有用的方法,例如從合約賬戶中轉出 NAS,進行地址格式驗證等。
Blockchain 有兩個屬性:
block 執行合約的當前區塊
它具有下列屬性:
— timestamp 區塊時間戳
— height 區塊高度
2.transaction 執行合約的當前交易
它具有下列屬性:
— hash 交易哈希值
— from 交易源地址
— to 交易目的地址,對于合約調用就是合約地址
— value 交易數值,字符串, 合約內用BigNumber存儲計算
— nonce 交易的 nonce 值
— timestamp 交易時間戳
— gasPrice 交易的 gasPrice,字符串,合約內用 BigNumber 存儲計算
— gasLimit 交易的 gasLimit,字符串,合約內用 BigNumber 存儲計算
Blockchain 還提供了兩個方法:
transfer(address, value) 將 NAS 從合約轉出到address對應的賬戶。
參數 address:接收 NAS 的 Nebulas 賬戶地址
參數 value:轉移數值,一個 BigNumber 對象
返回:0 – 轉移成功,1 – 轉移失敗
verifyAddress(address) 驗證參數 address 是否為一個有效的 Nebulas 地址。
返回:1 – 地址有效,0 – 地址無效
‘use strict’; var BankVaultContract = function () {};//聲明類 BankVaultContract.prototype = {//類的方法 init: function () { console.log(‘init: Blockchain.block.height = ‘ + Blockchain.block.height); console.log(‘init: Blockchain.transaction.from = ‘ + Blockchain.transaction.from); }, //這里給出兩個方法:transfer和 verifyaddress transfer: function (address, value) { var result = Blockchain.transfer(address, value); console.log(“transfer result:”, result); }, verifyAddress: function (address) { var result = Blockchain.verifyAddress(address); console.log(“verifyAddress result:”, result); } }; module.exports = BankVaultContract;事件(Event)
Event 模塊用來記錄在合約執行過程中產生的事件。被記錄的事件存儲在鏈上的事件Trie結構中,可以通過事件查詢方法 rpc.getEventsByHash 獲取所有事件。通過Event模塊輸出的事件其最終Topic由用戶自定義topic加固定前綴 chain.contract. 兩部分構成 。
使用方法如下:
//Event.Trigger(topic, obj); //topic:用戶定義的topic //obj:JSON 對象 ‘use strict’; var BankVaultContract = function () {};//聲明類 BankVaultContract.prototype = { init: function () {}, //這里只有一個testevent方法 //testevent里又一個event.Trigger() //event.Trigger里有("topic",{ data{} }) testEvent: function() { // 實際被存儲的topic是“chain.contract.topic” Event.Trigger(“topic“, { Data: { value: “Event test.” } }); } }; module.exports = BankVaultContract;控制臺(Console)
console 模塊提供了一個簡單的調試控制臺,類似于網頁瀏覽器提供的 JavaScript 控制臺。console 將把所有接收到的 args 以指定級別打印到 Nebulas Logger 上。
console.log([參數)?—?— info 級別
console.debug([參數)?—?— debug 級別
console.warn([參數)?—?— warn 級別
console.error(參數)?—?— error 級別
console.info(參數)?—?— console.log() 別名
如何調用合約以上就是與智能合約相關的內置功能模塊介紹。接下來,我們將簡單說明下如何調用合約。
首先通過啟動本地節點加入 Nebulas 的主網或測試網,啟動本地節點。
節點啟動后,調用任何合約函數前首先使用 [unlockAccount()]
(https://github.com/nebulasio/...` 方法解鎖賬戶。
然后你就可以使用 sendTransaction() 函數來執行智能合約調用了。
// Request //終端命令行 curl -i -H ‘Accept: application/json’ -X POST http://localhost:8685/v1/admin/transaction -H ‘Content-Type: application/json’ -d ‘{“from”:”n1NZttPdrJCwHgFN3V6YnSDaD5g8UbVppoC”,”to”:”n1qsgj2C5zmYzS9TSkPTnp15bhCCocRPwno”, “value”:”100″,”nonce”:8,”gasPrice”:”1000000″,”gasLimit”:”2000000″,”contract”:{“function”:”testEvent”,”args”:”[]”}}’ // Result //運行結果 { “result”:{“txhash”:”b55358c2e12c1d48d4e6beaee7002a59138294fb2896ea8059ff5277553af59f”,”contract_address”:””} }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24061.html
摘要:星云計劃智能合約代碼入門卡酷少星云鏈上的智能合約類似于面向對象編程語言中的類,合約可能包含狀態變量持久化固定化的變量以及可以修改這些變量的函數。星云鏈使用作為合約的執行引擎。是星云支持的第一種智能合約語言,還可以用寫,但本文主要介紹。 星云計劃——智能合約代碼入門 卡酷少Wechat:13260325501 星云鏈上的智能合約類似于面向對象編程語言中的類,合約可能包含狀態變量(持久...
摘要:剛好又過了一段時間,看到了星云發布的星云激勵計劃第一季活動,就是鼓勵開發者們基于星云鏈主網開發去中心化應用的活動,里面也包含了不小的獎勵。 最近一段時間,除了上班加班之外,基本上都在忙著開發 DApp,也就是所謂的去中心化應用(Decentralized Applications)啦,為什么突然就搞起這個了呢?事情是這樣的…… 就在前不久,很偶然地了解到了 Loom Network 這...
摘要:截至目前,布洛克城用戶數量已經突破萬,吸引了眾多區塊鏈應用入駐,包括預言家幣得利德,以及萬利馬鏈與飛車等游戲應用。 以謎戀貓為起點,區塊鏈游戲這趟列車已經風馳電掣地跑了滿一年。回顧去年同期,整個數字貨幣市場都陷入了非理性的狂熱中,天價貓不斷刷新著記錄,以太坊網絡也一度擁堵到被業內外大肆嘲笑,看,它竟然被一只貓給搞癱瘓了。時隔一年,盡管養貓游戲熱度已降,但是新玩法的興起還是吸引了越來越多...
摘要:月日,思否在廣州未來社舉辦黑客馬拉松,聚焦區塊鏈應用開發。未來,將繼續傳遞極客文化,在海內外和一些合作伙伴舉辦黑客馬拉松,。希望通過舉辦的黑客馬拉松發現一些優質項目,未來展開更深入的合作。 6月23日,SegmentFault 思否在廣州未來社舉辦黑客馬拉松,聚焦區塊鏈應用 DApp 開發。活動吸引了來自珠三角的極客參與,現場也來自硅谷和多倫多、上海等地區的團隊參與。本次活動嘉賓有 C...
摘要:上周末,來自硅谷團隊的游戲作品獲得思否區塊鏈黑客馬拉松北京站冠軍。本次黑客馬拉松有來自基金會科學家楊耀東合伙人劉海核心開發者姜家志星云鏈實驗室負責人劉杜然等多位嘉賓出席。 上周末,來自硅谷團隊的游戲作品Crypto Bird - An Implement of NabBoard獲得 SegmentFault 思否區塊鏈黑客馬拉松北京站冠軍。本次黑客馬拉松有來自 QuarkChain 基...
閱讀 2964·2021-10-15 09:41
閱讀 1620·2021-09-22 15:56
閱讀 2104·2021-08-10 09:43
閱讀 3273·2019-08-30 13:56
閱讀 1778·2019-08-30 12:47
閱讀 648·2019-08-30 11:17
閱讀 2770·2019-08-30 11:09
閱讀 2193·2019-08-29 16:19