前面我們了解了錢包的命令的基礎(chǔ)操作游两,那么今天我們就在之前賬戶的基礎(chǔ)上來了解一下怎么在AChian上完成最基礎(chǔ)的發(fā)幣功能。
一锅劝、APT1.0協(xié)議
首先我們需要了解一個概念就是APT1.0協(xié)議旺垒,這個東西是什么呢寨躁,就是在Achain上發(fā)行的貨幣都需要滿足APT1.0協(xié)議,這個就和ETH的ERC20差不多的意思,凡是在AChain上運行的代幣都需要滿足這個協(xié)議瑟啃,通俗來說就是需要有固定的幾個方法才行论泛。
協(xié)議的具體內(nèi)容:
https://raw.githubusercontent.com/Achain-Dev/Achain-Exchange/master/Achain_Token_Standard.pdf 大家可以自行下載查看。
主要有一下幾個方法:
1.構(gòu)造方法(用于定義你需要發(fā)行資產(chǎn)的具體信息蛹屿,比如資產(chǎn)符號屁奏,數(shù)額等等)
local function initContractInfo()
local info:ContractInfo = ContractInfo()
info.contractName="XXX_COIN" //合同名字
info.o?calAddress=“ACTD2iQ9A25cZ9rEtPwd7BNAyimRhyaYTdS6" //官方地址
info.symbol=“XXX" //資產(chǎn)符號
info.decimals = 100000 //單位
info.totalSupply=10000000000000000 //總數(shù)
return json.dumps(info)
end
2.contractInfo (當前合同的信息)
function M:contractInfo()
Return:{"symbol”:"XXX","decimals":100000,"totalSupply":1000000000,"contractName”:"XXX_TEST","o?calAddress":"ACTJHPo83uhSkD1tQLyt1fx4Duh5NKSD5HEY”}
Events: emit contractInfo({"symbol”:"XXX","decimals":100000,"totalSupply":1000000000,"contractName”:"XXX_TEST","o?calAddress":"ACTJHPo83uhSkD1tQLyt1fx4Duh5NKSD5HEY”})
3.contractName(當前合同的名字)
function M:contractName()
Return:XXX_TEST
Events: emit contractName(XXX_TEST)
4.symbol(當前合同的資產(chǎn)簡稱)
function M:symbol()
Return:XXX
Events: emit symbol(XXX)
5.officalAddress(官方地址)
function M:officalAddress()
Return:ACTD2iQ9A25cZ9rEtPwd7BNAyimRhyaYTdS6
Events: emit officalAddress(ACTD2iQ9A25cZ9rEtPwd7BNAyimRhyaYTdS6)
6.decimals(令牌使用的小數(shù)位數(shù),目前只支持5位小數(shù))
function M:decimals()
Return:100000
Events: emit decimals(100000)
7.totalSupply
function M:totalSupply()
Return:1000000000000000 //這里的代幣總量需要乘上面的小鼠位數(shù) 如果你想發(fā)行10個幣 那么總量就是10*100000
Events: emit totalSupply(1000000000000000)
發(fā)行代幣的總量,可以通過這個函數(shù)來獲取错负。所有智能合約發(fā)行的代幣總量是一定的坟瓢,totalSupply必須設(shè)置初始值。
8.balanceOf
輸入地址犹撒,可以獲取該地址代幣的余額折联。
function M:balanceOf(_owner:string)
Return:100000000
Events: emit balanceOf(100000000)
9.transfer_to
調(diào)用transfer函數(shù)將自己的token轉(zhuǎn)賬給_to地址
function M:transfer_to(_to_value:string)
Return:true/false
Events: emit transfer_to_fail('Illegal parameter’)
10.transferFrom
在你的同意下允許合同從你的賬戶中轉(zhuǎn)移代幣資產(chǎn)。
該方法必須調(diào)用 transfer_to_success 或者 transfer_to_fail事件
function M:transferFrom(_from_to_value:string)
Return:true/false
Events: emit transfer_to_fail Or: emit transfer_to_success
Format:(_from:balance,_to:balance,version(Increasing),time(Time Stamp))
11.approve
批準_spender賬戶從自己的賬戶轉(zhuǎn)移_value個token识颊〕狭可以分多次轉(zhuǎn)移。
function M:approve(_spender_value:string)
Return:true/false
Events: emit approve_fail('Illegal parameter’)Or: emit approve_success
Format:({balance,to_address,from_address})
12.allowance
返回_spender還能提取token的個數(shù)。
function M:allowance(_owner_spender:string)
Return:100000000
Events: emit allowance_fail('Illegal parameter’) Or: emit allowance_success
二怕享、實現(xiàn)一個基礎(chǔ)的代幣合約
1.開發(fā)工具的準備
介于目前Achain錢包中的開發(fā)工具還不完善沒有開發(fā)給所有人使用执赡,所以我們需要編寫智能合約需要一個支持glua語言的IDE工具,我目前使用的微軟的visual studio code,下載地址:https://code.visualstudio.com/
2.編寫合約
這里我直接開源我寫好的代幣合約的代碼函筋,大家可以根據(jù)代碼注釋修改之后就能發(fā)行自己的代幣沙合。
開源的github地址為:
3.編譯發(fā)布
首先我們打開錢包,這里的步驟我就省略了跌帐,詳情可以看上一篇文章首懈,然后執(zhí)行sandbox_open 命令打開沙箱,沙箱是AChian特有的運行環(huán)境谨敛,在沙箱中運行可以于主鏈隔離開來究履,調(diào)試的時候避免風(fēng)險。
這個時候我們就已經(jīng)成功的打開了一個沙箱環(huán)境脸狸。
接下來我們編譯已經(jīng)寫好的合約最仑。使用sandbox_compile_contract 命令 ,參數(shù)filename傳入文件路徑即可炊甲。
很快就編譯完成了泥彤。
不過由于目前主鏈的合約功能并未開啟,如果大家想要測試的話需要聯(lián)系官方渠道合作發(fā)布卿啡。