在Substrate链上跑Solidity ERC20智能合约 jasonruan 2020.07.18 1 前言 本实践案例中,我们首先会搭建和启动一条substrate链,再通过MetaMask这款著名的以太坊钱包浏览器插件...然后我们会在remix这款智能合约在线IDE上的完成ERC20智能合约的开发、编译、部署、调试。...frontier链的创世配置里面,内建我们在MetaMask上的自有账号,并初始化配置上足够的ETH数量,以便我们开发测试的需要。...[image.png] 智能合约编译成功,接下来我们就将已经开发完成的Solidity ERC20智能合约部署到Substrate链上。...3.3 智能合约部署 选择要部署的合约,填写构造方法中的发行总量和精度两个参数,点击transact按钮 注:当前版本需要在弹出的MetaMask对话框上,设置很大的gas limit值(4294967295
在Solidity中,异常处理是非常重要的,因为它帮助开发者确保智能合约的行为符合预期,并且能够在出现错误的情况下妥善地终止执行。...它通常用来验证函数参数或者状态变量是否满足合约的要求。require在函数调用开始时执行,如果条件不成立,则不会执行后续代码。...amount, "Deposit amount mismatch"); // 后续逻辑... } 2. assert assert也用于检查某个条件是否为真,但它主要用于内部错误,即那些理论上不应该发生的错误...当assert失败时,事务同样会被回退,但与require不同的是,它不会返回有用的错误信息给调用者。因此,assert主要用于调试目的,确保程序按照预期运行。...这允许你在智能合约中设置特定的错误码,从而使得外部调用者可以更容易地理解和处理这些错误。
简介 tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址。在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击。...但针对tx.origin的使用并不用谈虎色变,正确的使用还是有它的应用场景的。 漏洞详解 漏洞合约 在如下合约中使用到了tx.origin的判断。...其中在转账方法transferTo中进行了owner的判断,这里用到了tx.origin。...因为tx.origin是最初发起交易的地址,也就是合约拥有者的地址。然后,地址里面的ether便被转到攻击者地址中。 使用提醒 tx.origin不应该用于智能合约的授权。...原文链接:https://www.choupangxia.com/2019/07/18/solidity智能合约中tx-origin的正确使用场景/
我们已经探索了很多主题,在编写智能合约时我们发现经常使用相同的模式:例如,智能合约具有在构造函数中设置的所有者,然后生成修改器以便仅让所有者使用一些功能。...如果我们制定实施这些功能的基础合约并在未来的智能合约中重复使用它们那该怎么办?你一定猜得到,我们将使用继承。 在Solidity中,继承与经典的面向对象编程语言非常相似。...所有函数调用都是虚函数,这意味着会是调用派生函数最多的函数,除非明确给出了合约名称。当某一个智能合约从多个合约继承时,只在区块链上创建一个智能合约,并将所有基础合约中的代码复制到创建的智能合约中。...让我们写下我们的基本智能合约:它将让我们轻松地为我们的合约添加所有权。我们将其命名为Ownable。OpenZeppelin的员工写了很多可以在智能合约中使用的可重用代码。...internal:这些函数和状态变量只能在内部访问(即从当前合约或从中派生的合约中),而其他情况不使用它。 private:私有函数和状态变量仅对定义它们的智能合约可见,而不是在派生合约中可见。
引言:Gas费用与智能合约经济性 在以太坊平台上,每一笔交易和智能合约执行都需消耗Gas,其费用直接关联到交易的复杂度和资源占用。...选择合适大小的uint类型时,应考虑以下因素: 数据范围:确保所选类型能覆盖你预期的最大数值。 存储效率:较大的类型会占用更多的合约存储空间,影响合约的部署成本和执行效率。...运算效率:在EVM中,处理较小的数据类型可能比大类型更高效。 兼容性和标准化:考虑与其他智能合约、库或标准的兼容性,以太坊生态系统中uint256的广泛使用是为了最大化兼容性。...uint类型选择的重要性 uint(无符号整数)作为智能合约中处理数值的核心数据类型,其大小选择直接影响到存储和计算的效率。...考虑交互与兼容性 策略说明:在设计接口或与外部合约交互时,平衡效率与兼容性。尽管较小的uint更经济,但广泛接受的标准或接口可能偏好uint256,以确保最大兼容性。
然后我们会在remix这款智能合约在线IDE上的完成ERC20智能合约的开发、编译、部署、调试。...frontier链的创世配置里面,内建我们在MetaMask上的自有账号,并初始化配置上足够的ETH数量,以便我们开发测试的需要。...3 合约开发&部署 3.1 智能合约编写 我们要编写两个合约,其中SafeMath.sol是一个算数运算防溢出的安全库,xyc.sol是一个ERC20智能合约。...智能合约编译成功,接下来我们就将已经开发完成的Solidity ERC20智能合约部署到Substrate链上。...3.3 智能合约部署 •选择要部署的合约,填写构造方法中的发行总量和精度两个参数,点击transact按钮 注:当前版本需要在弹出的MetaMask对话框上,设置很大的gas limit值(4294967295
这只是一个简单的示例,实际的区块链可能包含更多功能和复杂性。智能合约编写智能合约是区块链上的自动化合约,其中包含了一些预定义的规则和条件,当满足这些条件时,合约会自动执行。...当执行转账时,合约会检查发送者账户余额是否足够,并相应地更新账户余额。这只是一个简单的示例,实际的智能合约可能包含更多功能和逻辑。...智能合约编写与部署智能合约是区块链上的自动化合约,它们运行在区块链上,并根据预定的规则和条件执行操作。以太坊是一种支持智能合约的区块链平台,智能合约通常使用Solidity语言编写。...在本节中,我们将介绍如何编写和部署一个简单的智能合约。...要运行这个测试,我们可以在命令行中执行以下命令:$ pytest test_simple_token.py这将运行测试用例,并输出测试结果。
1,Solidity智能合约函数 辉哥的文章《第十六课 不用编程,如何把长文章记录到以太坊区块链上?》 是通过MetaMask的交易形式把数据写到链上。...本文提供另外一个方式,通过智能合约函数的方式把数据写到智能合约的变量区,其数据存储在storage区域,可通过函数查找出来。...合约代码: pragma solidity ^0.4.24; contract LongRecord{ mapping (uint => string) pic; uint x=0;...2.1 部署智能合约 为了省钱,MetaMask切换到"Repston Test Network"下: 2.2 写入长文本 假设长文本内容为 辉哥简书专栏个人IP的募集计划书: 1) 时间:2018年9...2> 辉哥承诺以期间产生的简书专栏所得的50%收入按募集比例回馈给捐献者。 3> 募集信息以以太坊智能合约形式写入链上,不可篡改。
Solidity是以太坊的主要编程语言,它是一种静态类型的 JavaScript-esque 语言,是面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机(EVM)上运行。...msg.sender msg.sender指的是当前调用者(或智能合约)的 address。 注意:在 Solidity 中,功能执行始终需要从外部调用者开始。...这里主要介绍 require require使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行: function sayHiToVitalik(string _name) public returns...Memory 变量则是临时的,当外部函数对某合约调用完成时,内存型变量即被移除。 你可以把它想象成存储在你电脑的硬盘或是RAM中数据的关系。...import 在 Solidity 中,当你有多个文件并且想把一个文件导入另一个文件时,可以使用 import 语句: import ".
最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上不断地记录我的成长过程。...一、文件名 solidity文件的扩展名为*.sol 二、指定编译器版本 pragma solidity ^0.4.0; 表示源程序在大于等于0.4.0版本的编译器可以正常工作,在大于等于0.5.0版本中的编译器中无法工作...六、多参数返回 在函数的返回值中可以一次返回多个参数,比如:在返回一个数组中的元素的同时,返回它在数组中所在的位置时,这样可以一次给多个变量赋值。...assert常用于数组越界、元素非空的检查上。 而require要检查的是软件可能经常发生的情况,比如给函数中传递的参数时是否满足一定的条件等等。...我学习合约编程的目的是什么呢? 1、手工用imtoken钱包给许多人发代币是一件非常费力且容易出错的事,想写一个合约来自动完成这件事。 2、深入了解以太坊的背后原理。
以太坊不仅是一种加密数字货币,它更是功能完备的智能合约平台,solidity就是用来开发以太坊上的智能合约的原生开发语言。...在这个solidity快速教程中,我们将使用最新0.5版的solidity,以一个具体的案例来介绍solidity智能合约的开发、部署与交互,希望对你快速掌握solidity智能合约的开发有所帮助。...在传统的遗嘱中,遗产分配方案是落实在法律文件上的,然后当真正开始分配时,法官需要重审文件并做出相应的决定。常见的问题发生在家庭成员之间对分配比例的争执上,甚至因此而导致家庭成员关系的破裂。...注意在solidity中,末尾的分号不可省略。 3、编写第一个solidity合约 接下来就可以定义我们的第一个合约: ?...当我们在solidity中定义变量时,必须先声明其类型。address是solidity中一种特殊的类型,它表示一个以太坊地址。address类型的变量有一些特殊的方法,我们在后面会进一步了解。
我们有必要花点时间深入了解发生了什么变化,并简要考虑一下这些变化在实践中是如何影响可靠性智能合合约代码的。...派生合约不再使用“using”声明继承库(例如:using SafeMath for uint)。相反,这样的声明必须在希望使用类型库的每个派生合约中重复。...不太明显的变化 外部存储的映射 映射只存在于存储中,以前,结构体或数组中的映射将被忽略/跳过。我们同意文档中的说法,这种行为是“令人困惑和容易出错的”。...YUL 不允许在标识符中使用连续的和尾随的点。引导点已经被禁止了。 Yul: 不允许EVM指令pc()。 你可能会想,pc的指令是什么?...这对智能合约安全来说是完全有利的——而要成为一名熟练的Soldity开发者,及时了解最新的可靠性变化是重要的一部分。 ---- 本翻译由 Cell Network[7] 赞助支持。
Solidity中合约的含义就是一组代码(它的 *函数* )和数据(它的 *状态* ),它们位于以太坊区块链的一个特定地址上。...当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。 Solidity 语句以分号(;)结尾 状态变量 状态变量是被永久地保存在合约中。...uint 无符号数据类型, 指其值不能是负数,对于有符号的整数存在名为 int 的数据类型。 Solidity中, uint 实际上是 uint256代名词, 一个256位的无符号整数。...和函数的参数类似,私有函数的名字用(_)起始。 注意:在智能合约中你所用的一切都是公开可见的,即便是局部变量和被标记成 private 的状态变量也是如此。...在智能合约中使用随机数很难保证节点不作弊, 这是因为智能合约中的随机数一般要依赖计算节点的本地时间得到, 而本地时间是可以被恶意节点伪造的,因此这种方法并不安全。
在长安链上,用户可以通过高级语言(Golang、Rust、Solidity、TinyGo和C++)来编写智能合约,经过编译后,以二进制文件、WASM、EVM字节码的形式存储在区块链中,用户可以通过发送交易来触发执行智能合约中的代码...,用户编写合约时,需要注意这些特性。...目前ChainMaker已经支持的智能合约开发SDK包括Golang、Rust、Solidity、TinyGo和C++。3. 智能合约生命周期管理长安链的整体生命周期管理流程如下图所示:4....合约创建用户编写完成智能合约后,经过编译器编译为字节码,需要通过发送交易的形式部署到区块链上。发送的交易将被共识节点和同步节点接收和处理,在校验完成各项参数后,字节码将被存储在区块链数据库中。...在校验参数的过程中,如果下列校验出错,将把执行的错误信息记录在交易的执行结果中:同一条链上不允许存在重名的合约字节码不能为空指定的智能合约执行引擎必须有效版本信息不能为空随后将调用执行合约的初始化方法:
如果你不懂 Solidity 语言,就谈不上如何「玩转以太坊」了。 本文将重点介绍 Solidity 及其概念,以及如何编写高效的智能合约。别嫌长,都是干货!...以太坊虚拟机 Solidity 是针对以太坊虚拟机(EVM)的编程语言。以太坊区块链通过编写和执行称为智能合约的代码来帮助扩展其功能。 EVM 执行作为智能合约的一部分的代码。...Solidity 语句的终结符是分号(;)。 在扩展名为 .sol 的 Solidity 文件中编写 Solidity 代码。...智能合约是 EVM 部署和执行的基本单元。尽管本书后面的多个章节专门用于编写和开发智能合约,但本章将讨论智能合约的基本结构。 从技术上讲,智能合约由两个结构——变量和函数组成。...合约中声明的事件在全局域有效,并且被合约中的函数所调用。使用 event 关键字声明一个事件,后跟一个标识符和参数列表并以分号结尾。参数中的值可用于记录信息或执行条件逻辑。
不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试环境。 智能合约就是运行在以太坊上的程序。...Solidity语言可以将数据存储在区块链上,数据的每一个状态都可以永久存储,所以需要确定变量使用的是内存,还是区块。 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。...在合约中可以编写Solidity函数,类似于类中的方法。...在正常情况下,应该将智能合约部署在以太坊网络上,然后通过以太坊客户端调用,不过现在还没有讲如何将智能合约部署到以太坊网络上,以及如何调用智能合约。所以目前只能使用最简单的方式测试智能合约。...,这种运行方式只能测试智能合约中的函数的逻辑是否正确,并不能将以太坊客户端、以太坊网络和智能合约放到一起联调,所以在实际的场景中,需要将智能合约部署到以太坊网络上才能完整地对其进行测试。
由于访问控制错误,总共有约500,000个以太币锁在智能合约中。先前已经在自动利用漏洞产生的背景下研究了这种访问控制漏洞的自动检测,此外整数溢出错误构成了智能合约中的主要漏洞类别。...每当分析工具之一发现新漏洞时,EVMPATCH都会自动修补合约,测试修补后的合约并进行部署。A.设计选择代理模式使在以太坊中轻松部署修补的智能合约成为可能。...重写EVM智能合约时,字节码重写器中的跳转指令和代码复制指令都需要考虑。重写智能合约的显而易见的策略是在插入新指令或删除旧指令后,修复代码中的所有常量地址以反映新地址。...请注意,这里需要使用显式的sload从存储中加载变量,并且表达式在逻辑上与上图中的补丁相反,因为该补丁实际上插入了Solidity require语句。...开发人员研究表明,自动修补方法可以大大减少修补智能合约所需的时间,并且实现EVMPATCH实际上可以集成到智能合约开发人员的工作流程中。
随机数生成作为目前以太坊游戏的核心,在原理的定制上直接决定了项目质量和项目寿命。...计算机也是如此,在区块链开发,合约的编写当中,我们给予不同函数、不同变量以不同的名字,程序才能按照编写的意愿调用和执行。正确书写名称、正确声明函数自然就成为智能合约安全开发的基础。...当一个合约从多个合约继承时,只有一个合约(子类)会被部署到链上,而其他的代码都会被拷贝到这个单一的合约当中去。...03 构造函数失配漏洞 上面讲到如果构造函数在声明时出错,变成了一个普通函数,那么,合约将存在重大安全风险。...[2]: 以太坊蜜罐智能合约分析: https://paper.seebug.org/631/ [3]: Solidity语法---以太坊智能合约生命周期: https://www.jianshu.com
为了在以太坊上编程,你需要首先利用 Solidity 创建一个 "智能合约"--这是 Gavin Wood 博士在 2014 年为以太坊的智能合约专门设计的定制语言。...然后,智能合约在以太坊虚拟机(EVM)上运行。 作为一个 HLL,Solidity 使软件开发更方便用户使用。...此外,Solidity 受到其他流行语言(如 C++、Java 和 Python)的影响并与之相似,使新的开发人员更容易在 EVM 生态系统中开始开发。...因此,尽管智能合约经历了极其复杂和昂贵的审计,我们仍然看到智能合约漏洞在以太坊生态系统中被利用。 今天,Solidity 是一个独立的开源项目,在 GitHub 上进一步完善和发展。...Solidity 的劣势 作为一种编译型语言,Solidity 更容易出现可利用的 bug 顺序处理是网络吞吐量的一个瓶颈 Solidity 的采用 在撰写本报告时,Solidity 占所有智能合约锁定总价值的
合约的可升级性智能合约在部署后,通常无法像传统软件一样直接进行修改或更新。这是因为区块链上的智能合约一旦被部署,就会被记录在区块链上,并且其代码是不可更改的。...可升级合约支持在保持原有合约逻辑的基础上,灵活地添加或更新功能。...通过在合约设计中引入可升级性,可以让智能合约在长期运行过程中更加稳定、可靠,避免因为技术迭代导致的过时和不兼容。...可升级合约开发升级智能合约是一个多步骤且容易出错的过程,因此为了尽量减少人为错误的可能性,使用一个尽可能自动化该过程的工具是理想的。...OpenZeppelin提供了一系列的插件,可以帮助开发者在Solidity智能合约中实现可升级性。下面以Foundry为例,介绍如何使用OpenZeppelin插件进行智能合约升级。