DAPP智能合约系统开发详细技术及方案项目

简介: 区块的作用就是将不同时间阶段内的交易数据按照一定的格式和数量,打包成结构化数据,方便存储和管理。

区块的作用就是将不同时间阶段内的交易数据按照一定的格式和数量,打包成结构化数据,方便存储和管理。

  区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。

string public name = 4FunCoin;

string public symbol = 4FC;

uint8 public decimals = 18; // 18 是建议的默认值

uint256 public totalSupply; // 发行量

// 建立映射 地址对应了 uint' 便是他的余额

mapping (address => uint256) public balanceOf;

// 地址对应余额

mapping (address => mapping (address => uint256)) public allowance;

// 事件,用来通知客户端Token交易发生

event Transfer(address indexed from, address indexed to, uint256 value);

// 事件,用来通知客户端代币被消耗(这里就不是转移, 是token用了就没了)

event Burn(address indexed from, uint256 value);

// 这里是构造函数, 实例创建时候执行

function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {

totalSupply = initialSupply 10 * uint256(decimals); // 这里确定了总发行量

balanceOf[msg.sender] = totalSupply; // 这里就比较重要, 这里相当于实现了, 把token 全部给合约的Creator

name = tokenName;

symbol = tokenSymbol;

}

// token的发送函数

function _transfer(address _from, address _to, uint _value) internal {

require(_to != 0x0); // 不是零地址

require(balanceOf[_from] >= _value); // 有足够的余额来发送

require(balanceOf[_to] + _value > balanceOf[_to]); // 这里也有意思, 不能发送负数的值(hhhh)

uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 这个是为了校验, 避免过程出错, 总量不变对吧?

balanceOf[_from] -= _value; //发钱 不多说

balanceOf[_to] += _value;

Transfer(_from, _to, _value); // 这里触发了转账的事件 , 见上event

assert(balanceOf[_from] + balanceOf[_to] == previousBalances); // 判断总额是否一致, 避免过程出错

}

function transfer(address _to, uint256 _value) public {

_transfer(msg.sender, _to, _value); // 这里已经储存了 合约创建者的信息, 这个函数是只能被合约创建者使用

}

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {

require(_value <= allowance[_from][msg.sender]); // 这句很重要, 地址对应的合约地址(也就是token余额)

allowance[_from][msg.sender] -= _value;

_transfer(_from, _to, _value);

return true;

}

function approve(address _spender, uint256 _value) public

returns (bool success) {

allowance[msg.sender][_spender] = _value; // 这里是可花费总量

return true;

}

function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {

tokenRecipient spender = tokenRecipient(_spender);

if (approve(_spender, _value)) {

spender.receiveApproval(msg.sender, _value, this, _extraData);

return true;

}

相关文章
|
计算机视觉
Emgu.CV 报错 Emgu.CV.Util.CvException: OpenCV
Emgu.CV 报错 Emgu.CV.Util.CvException: OpenCV 异常信息:Emgu.CV.Util.CvException: OpenCV: 在 Emgu.CV.CvInvoke.CvErrorHandler(Int32 status, IntPtr funcName, IntPtr errMsg, IntPtr fileName, Int32 line, I...
330 1
|
10月前
|
存储 数据采集 监控
云上数据安全保护:敏感日志扫描与脱敏实践详解
随着企业对云服务的广泛应用,数据安全成为重要课题。通过对云上数据进行敏感数据扫描和保护,可以有效提升企业或组织的数据安全。本文主要基于阿里云的数据安全中心数据识别功能进行深入实践探索。通过对商品购买日志的模拟,分析了如何使用阿里云的工具对日志数据进行识别、脱敏(3 种模式)处理和基于 StoreView 的查询脱敏方式,从而在保障数据安全的同时满足业务需求。通过这些实践,企业可以有效降低数据泄漏风险,提升数据治理能力和系统安全性。
1540 245
云上数据安全保护:敏感日志扫描与脱敏实践详解
|
11月前
|
存储 供应链 安全
智能合约与区块链技术的融合:重塑数字信任###
本文深入探讨了智能合约与区块链技术融合的现状、挑战与未来趋势。不同于传统摘要,本文以高度概括的形式,聚焦于两大核心要点:一是智能合约作为区块链上的自执行协议,如何通过代码自动化地促进信任最小化的交易;二是这种融合如何推动数字经济向更加透明、高效、安全的方向发展。全文围绕智能合约的工作原理、区块链提供的底层支持、以及两者结合所面临的技术与非技术挑战展开讨论,旨在为读者提供一个关于这一前沿技术领域的全面而深入的视角。 ###
|
11月前
|
供应链 区块链 数据安全/隐私保护
区块链技术基础:从去中心化到智能合约
区块链技术基础:从去中心化到智能合约
206 0
|
11月前
|
搜索推荐 关系型数据库 MySQL
mysql like查询优化
通过合理的索引设计、使用全文索引、优化查询结构以及考虑分片和分区表,可以显著提高MySQL中 `LIKE`查询的性能。针对不同的应用场景选择合适的优化策略,能够有效地提升数据库查询效率,减少查询时间。希望这些方法和技巧能帮助您优化MySQL数据库中的模糊查询。
1161 4
|
前端开发
基于jeecgboot的ERP单据中增加编号的方法
基于jeecgboot的ERP单据中增加编号的方法
406 1
|
11月前
|
机器学习/深度学习 自然语言处理 Java
RAG VS Fine-Tuning模型微调详解
【11月更文挑战第20天】在深入探讨RAG(Retrieval-Augmented Generation,检索增强生成)与Fine-Tuning(模型微调)这两种技术之前,让我们先回顾一下它们的历史背景和发展脉络。
471 19
|
机器学习/深度学习 定位技术 Python
深入理解线性回归模型的评估与优化方法
深入理解线性回归模型的评估与优化方法
|
网络协议 Java
在Java中使用TCP协议搭建一个简单的客户端
如何在Java中使用TCP协议搭建一个简单的客户端
462 2
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现