Solidity:創建簡易代幣
在終端輸入
truffle create contract MyToken
創建
![](https://assets.matters.news/embed/4d2a3964-d884-44be-a7b3-80887261c352.png)
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; contract MyToken { uint INITIAL_SUPPLY = 10000; mapping(address => uint) balances; constructor() { balances[msg.sender] = INITIAL_SUPPLY; } // transfer token for a specified address function transfer(address _to, uint _amount) public { require(balances[msg.sender] > _amount); balances[msg.sender] -= _amount; balances[_to] += _amount; } // Get the balance of the specified address // Constant and Immutable State Variables. See https://docs.soliditylang.org/en/v0.8.10/contracts.html#modifiers function balanceOf(address _owner) public view returns (uint) { return balances[_owner]; } }
在migrations資料夾新增
var HelloWorld = artifacts.require("HelloWorld"); var MyToken = artifacts.require("MyToken"); module.exports = function(deployer) { deployer.deploy(HelloWorld); deployer.deploy(MyToken); };
編譯
truffle compile
![](https://assets.matters.news/embed/8aa9edbf-1fb2-4514-946a-2b3735d8706c.png)
開始部署,Run
truffle migrate
![](https://assets.matters.news/embed/58718bde-a9c5-4016-8faa-c901e277ae12.png)
![](https://assets.matters.news/embed/53c03192-83d9-44f0-af65-ec4b6afdf9bc.png)
Test
開啟console
truffle console let contract MyToken.deployed().then(instance => contract = instance)
![](https://assets.matters.news/embed/1b177141-43ce-49a5-83cb-6a8d17f83c0a.png)
contract.balanceOf(accounts[0]) contract.balanceOf(accounts[1])
![](https://assets.matters.news/embed/377f653e-c9c6-4700-87ee-495d1b59f329.png)
contract.transfer(accounts[1], 123) contract.balanceOf(accounts[0]) contract.balanceOf.call(accounts[1])
![](https://assets.matters.news/embed/d61fef3f-451b-4c03-90ad-ea56e42baeac.png)
---
使用Remix測試:
(可以參考前面: {% post_link Remix-On-Vscode '在VSCode上使用Remix' %})
1.啟動ganache-cli
![](https://assets.matters.news/embed/50d80076-6f6b-4f0e-bbc7-55e78c053b2a.png)
2.使用remix連接local測試網
![](https://assets.matters.news/embed/c4af1c6f-e51a-4398-88bb-b34dfbc7f115.png)
3.編譯並部屬
![](https://assets.matters.news/embed/cc716933-1960-4ccf-a011-231c49e0012b.png)
4.測試
先呼叫部屬者,並從output中觀察結果
![](https://assets.matters.news/embed/20feef26-fea1-44a6-838c-9a3a66d13c97.png)
接著轉5000,測試轉帳功能
![](https://assets.matters.news/embed/98c5f21f-8d90-4e24-b048-7f85af1250c6.png)
![](https://assets.matters.news/embed/152fc318-2f25-498b-80a3-06279cf54e13.png)
再看一次部屬者的Balance
![](https://assets.matters.news/embed/905d6dd7-98b7-42dd-94a6-6a7ed810a444.png)
![](https://assets.matters.news/embed/09569263-dcf9-4c91-b3d1-e10c28958b08.png)
最後看轉Token過去的account
![](https://assets.matters.news/embed/a02d176a-9c97-46b7-9af9-566317bf639a.png)
完成,簡單的token生成與轉移token已經實現,但一般的Token我們會使用**ERC20**,而不會像這樣實現陽春的功能,會使用更嚴謹的方式來防止漏洞。
歡迎大家來我的Blog看:
1.Blog: 文章連結