网络为师,文章作伴。
在学习区块链的过程中遇到了不少问题,一一记录下来,方便日后总结回顾。
入门的文章
完全是看的这篇的(十分感谢博主),其中踩了个大坑就是 ABI的导入出了点问题
https://blog.csdn.net/jevior/article/details/81229860?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.no_search_link
这里把这篇文章的重要代码摘要出来方便阅读,直接复制粘贴到运行的时候可能会出一些问题,因为web3一直再更新,编译器的版本也不同
Solidity部分
pragma solidity ^0.4.17;
contract Data{
string public data;
function Data()public{
data = "init data";
}
function setData(string str) public payable{
data = str;
}
function getData() public view returns (string) {
return data;
}
}
WEB部分
var Web3 = require("web3");
var web3 = new Web3();
web3.setProvider(new Web3.providers.HttpProvider("http://localhost:7545"));
var abi = [{"constant":true,"inputs":[],"name":"getData","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"setData","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"data","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}];
var address = '0x345ca3e014aaf5dca488057592ee47305d9b3e10';
var data = new web3.eth.Contract(abi,address);
data.methods.getData().call(null,function(error, result){
console.log("the data:"+result);
});
data.methods.setData("hello blockchain").send({from: '0x627306090abaB3A6e1400e9345bC60c78a8BEf57'}).on('transactionHash', function(hash){
console.log("hash:", hash);
data.methods.getData().call(null,function(error, result){
console.log("the data:"+result);
});
});
发币文章
发币我看的是这篇文章,比较详细,说是发币,其实是赋予(强加)代码一个属性
文章的链接:https://blog.csdn.net/a6taotao/article/details/112602580 (十分感谢博主的分享)
这里面的文章写的是非常非常的不错,很详细,比外面买的很多书好多了。
发币过程可以配合这个视频一起看
https://www.bilibili.com/video/BV1TK4y1E7gW
发币入门
如果你进过土狗项目群,估计你应该听过这样的对币的介绍【燃烧,分红,XXX打入黑洞】
对于进阶发币,其实也就是多了几个函数,这篇文章讲的非常不错,这里把重点知识摘抄出来
文章链接:https://blog.csdn.net/su_bo_2010/article/details/80095229
如果对approve授权函数弄不清楚,可以看看这篇详细介绍的文章
https://www.jianshu.com/p/79939b782e02
这是一个ERC20代币的标准代币接口
contract ERC20 { function totalSupply() constant returns (uint totalSupply); function balanceOf(address _owner) constant returns (uint balance); function transfer(address _to, uint _value) returns (bool success); function transferFrom(address _from, address _to, uint _value) returns (bool success); function approve(address _spender, uint _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint remaining); event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); }
下面就是一些代币的扩展
/* This notifies clients about the amount burnt */
event Burn(address indexed from, uint256 value);
/* This notifies clients about the amount frozen */
event Freeze(address indexed from, uint256 value);
/* This notifies clients about the amount unfrozen */
event Unfreeze(address indexed from, uint256 value);
顾名思义,这三个事件分别对应(具体看实现代码):
- 燃烧操作者账户中指定金额的代币,当燃烧时代币总额也会对应减少;
- 冻结指定账户指定金额;
- 解冻指定账户指定金额。
进阶学习✌
如何计算质押奖励?
https://learnblockchain.cn/question/2732
想要一份单币质押和lp质押的demo学习一下?
Sushi 是一个很好的参考实现:
LP 质押(MasterChef.sol):
https://github.com/sushiswap/sushiswap/blob/canary/contracts/MasterChef.sol
单币质押:(SushiBar.sol):
https://github.com/sushiswap/sushiswap/blob/canary/contracts/SushiBar.sol
区块链游戏
一个非常经典的游戏代码
https://lisongbai.top/2020/06/27/%E5%83%B5%E5%B0%B8%E6%94%BB%E5%87%BB%E4%BA%BA%E7%B1%BB/