iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
0

導言

本次的範例simple token,是Solidity document上其中一個example,筆者覺得這個example在解釋所謂Token概念是比較直白的,雖然跟真實ERC20 Protocol所建立的Token比起來,在真實交易邏輯上還相差很遠,安全性也不夠,不過在語法上有使用到一些常用且特殊的solidity語法,會是比較好說明的範例之一。

Simple Token smart contract主要提供三個功能 創建token數量、查詢指定用戶token餘額、傳送token給指定用戶
Simple Token reference

程式碼

pragma solidity^0.4.25;
contract SimpleToken{
	address owner;
	uint public totalSupply;
    mapping(address => uint) balances;
    constructor(uint _initialSupply)public{
        totalSupply = _initialSupply;
        owner = msg.sender;
        balances[owner] = totalSupply
    }
    function balanceOf(address _someone)public view returns(uint){
    	return balances[_someone];
    }
    function transfer(address _to,uint _value) public return(bool){
        require(_value > 0);
        require(balances[msg.sender] >= _value);
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        return true;
    }
}

解說

address owner

address type 代表blockchain帳戶的型別,格式為 20 bytes (40個字元)所組成

uint public totalSupply;

uint 為 unsign integer的意思,也就是沒有負數符號的整數,在solidity uint預設值為uint256 = 2**256public在solidity代表這個function 可以被外部、內部呼叫或者是繼承。

mapping(address=>uint)balances;

mapping 為映射的意思,以key-value的形式紀錄資料,小弟習慣把它形容是在solidity 的JSON object,以這個例子解釋balances = {address type : uint type},balance中文意思為餘額,在這個contract代表的意義就是指address有多少token,也就是這個address對應的數字為多少

constructor(uint _initialSupply)

constructor是一個function,會在deploy contract的時候同步執行。以目前的例子來看,constructor (uint _initialSupply)代表要在deploy的時候輸入uinttype的參數,代表這個Token的初始供給量,並且設定deploy contract 的address為owner

function balanceOf(address _someone) { return balances[_someone]; }

balanceOf function 主要功能是查詢指定address 的token餘額,輸入addresstype 的參數,return balances[_someone] 回傳某個address所對應的數字

require(_value > 0);

require為solidity判斷錯誤的語法,只要條件不符合require內的設定,EVM就會回傳ERROR,完整寫法是require(_value > 0,"_value need more than 0"),在條件後面輸入字串,可以在回傳錯誤時夾帶提示訊息,並回傳剩餘的gas

require(balances[msg.sender] >= _value);

判斷執行transfer function的address,擁有的Token必須大於要傳送的value

balances[msg.sender] -= _value;
balances[_to] += _value;

當所規定的條件都符合時,就會將雙方的所記錄的balances餘額,進行增加token和扣除token的動作


上一篇
Day1-Hello World
下一篇
Day3-Todo
系列文
30天30個Smart contract 20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言