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