说明:
环境使用ubuntu1804-desktop版本。
1 truffle以及ganache
1) Truffle
Truffle 是最流行的开发框架,能够在本地编译、部署智能合约,使命是让开发更容易。
Truffle 需要以太坊客户端支持,需要支持标准的JSON RPC API。
2)Ganache
Ganache可以快速启动个人以太坊区块链,并可以使用它来运行测试,执行命令、检查状态,同时控制链条的运行方式。
通过ganache可以快速查看所有账户的当前状态,包括他们的地址、私钥、交易和余额,查看Ganache内部区块链的日志输出,包括响应和其他重要的调试信息,检查所有块和交易,以获取相关问题的信息。
Ganache前身即为testrpc,即将testrpc做成界面化。
2 工具安装
1) 安装truffle
apt-get install nodejs
apt-get install npm
npm install -g truffle
# truffle version
Truffle v4.1.14 (core: 4.1.14)
Solidity v0.4.24 (solc-js)
2) 安装ganache web版本
mkdir -p /home/lyh/003_ganache/
cd /home/lyh/003_ganache/
wget https://github.com/trufflesuite/ganache/releases/download/v1.2.2/ganache-1.2.2-x86_64.AppImage
chmod +x ganache-1.2.2-x86_64.AppImage
执行 ./ chmod +x ganache-1.2.2-x86_64.AppImage 即可将ganache运行起来。
更多版本见:https://github.com/trufflesuite/ganache/releases
3 代币功能开发
3.1 新建目录
mkdir -p /home/lyh/002_truffle/mycoin
cd /home/lyh/002_truffle/mycoin
3.2 初始化代码模板
truffle unbox tutorialtoken
3.3 下载代币模板
npm install openzeppelin-solidity
3.4 创建名为” TutorialToken”的智能合约
内容如下,ERC20.sol是一个标准代币模板
# cat contracts/TutorialToken.sol pragma solidity ^0.4.24;
import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
contract TutorialToken is ERC20 { string public name = "TutorialToken"; string public symbol = "TT"; uint8 public decimals = 2; uint public INITIAL_SUPPLY = 12000;
constructor() public { _mint(msg.sender, INITIAL_SUPPLY); } } |
3.5 新增部署脚本
这个地方就是智能合约的类名、文件名需要保持一致,不然会导致部署失败。
# cat migrations/2_deploy_contracts.js var TutorialToken = artifacts.require("./TutorialToken.sol");
module.exports = function(deployer) { deployer.deploy(TutorialToken); }; |
3.6 编译智能合约
truffle compile
4 部署以及调试
4.1 运行ganache
./ ganache-1.2.2-x86_64.AppImage
4.2 ganache的运行效果图
4.3 修改truffle.js配置文件
truffle中的port要与ganache中端口一致,当前是7545
# cat truffle.js module.exports = { // See <http://truffleframework.com/docs/advanced/configuration> // for more about customizing your Truffle configuration! networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*" // Match any network id } } }; |
4.4 修改src/js/app.js配置
这个文件中默认的HttpProvider的端口是9545,会导致代币无法获取。
initWeb3: function() { // Initialize web3 and set the provider to the testRPC. if (typeof web3 !== 'undefined') { App.web3Provider = web3.currentProvider; web3 = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers //App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545'); App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:7545'); web3 = new Web3(App.web3Provider); }
return App.initContract(); }, |
4.5 修改src/index.html配置
默认的https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js由于无法访问国外而导致无法获取代币数量,替换成官网的路径。
<!-- script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script --> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> |
4.6 部署合约
# truffle migrate --reset Using network 'development'.
Running migration: 1_initial_migration.js Replacing Migrations... ... 0x71626190150d848374aa0ed680e123b8307d2c09e8d6e943550e77ec691d6c11 Migrations: 0x4bea8091d3ff6589bd7193cd04c1e31b37c3aea6 Saving successful migration to network... ... 0xe616eddc312bc94879291caf9294058eff656520b51386a065b7976c4399df56 Saving artifacts... Running migration: 2_deploy_contracts.js Replacing TutorialToken... ... 0x60f3b3f2b92c6e80d9d4d9ffcc7af59b8538b17936cee078d64c4b09073fb94a TutorialToken: 0x538f4db70fd6f3b6dbdde7a3ca41b4d3aaa90e9f Saving successful migration to network... ... 0x00ab482034f971e78feb9ec07e7c2b4bdd2e5197a334cee62efa91252758a71f Saving artifacts... |
4.7 看到ganache余额变少
5 集成metamask钱包来展示代币信息
5.1 安装chrome浏览器
由于默认的firewall装完metamask一直无法登陆,所以使用chrome。
5.1.1 添加源
wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/
5.1.2 导入谷歌软件的公钥
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
5.1.3 更新源
apt-get update
5.1.4 安装稳定版chrome
apt-get install google-chrome-stable
5.2 添家metamask插件
5.2.1 下载metamask
我使用的是:
MetaMask_v3.9.5.crx
(http://www.onlinedown.net/soft/1194708.htm)
5.2.2 chrome添加插件
选择more tools/extensions,然后将下载的插件拖过去即可(需要选择开发者模式)。
5.2.3 效果
会在浏览器中多一个狐狸的标识
5.3 metamask配置
5.3.1 点击,基本全是accept
5.3.2 导入已经存在的秘钥
5.3.3 导入已经存在秘钥界面
5.3.4 获取wallet Seed
在ganache的设置界面中
将红框中的字体复制到metamask的wallet seed,设置用户密码即可。
5.3.5 登录metamaks效果
如图,可以通过点击+,与获取ganache中的私钥来导入账号。
5.3.6 对接ganache私链
点击如下位置
5.3.7 填写私链地址
5.3.8 最终效果
可以看到ganache中的余额同步过来
5.4 运行代币网页
npm run dev
5.5 使用chrome登录代币页面
5.6 代币转移
复制ganache中第二个账号的地址,并转移200个代币
5.7 钱包确认
5.8 最终账号1代币数量减少
可以在metamask中导入第二个账号,然后刷新 localhost:3000,可以看到代币的数量变为200。
6 参考资料
官网:
https://truffleframework.com/tutorials/robust-smart-contracts-with-openzeppelin
metamask的配置:
https://truffleframework.com/tutorials/pet-shop#interacting-with-the-dapp-in-a-browser
一些遇到的问题:
https://blog.csdn.net/weixin_42350212/article/details/80753328