草庐IT

$solidity

全部标签

剖析Solidity合约创建EVM bytecode

1.引言前序博客有:EthereumEVM简介揭秘EVMOpcodes在以太坊中,当合约创建时,initcode将作为交易的一部分发送,然后返回该合约的实际bytecode——runtimecode。详细可参看以太坊黄皮书第7章。当交易中的recipient地址为空(即0)时,该交易为创建合约交易:创建合约交易中可包含value值,即创建合约的同时也给新创建的合约转账(此时,Solidity合约的构造函数需标记payable关键字)。执行交易中的initcode,返回存储在新创建合约的bytecode(runtimecode)。【返回用到RETURNopcode,从虚拟机memory取outp

以太坊Solidity合约升级策略

1.引言前序博客有:以太坊proxy合约以太坊的proxycontractpattern合约升级示例代码可参看:https://github.com/celo-org/optics-monorepo/tree/main/solidity/optics-core/contracts/upgrade其中,主要由三部分组成:1)UpgradeBeacon.sol:存储了implementation合约的地址,支持controller对该implementation地址进行升级操作。2)UpgradeBeaconController.sol:设置为UpgradeBeacon合约的controller,

Solidity学习笔记

学习视频来源:基于以太坊的智能合约开发教程【Solidity】读取数据不需要消耗燃料费Gas,修改数据需要消耗燃料费。pragmasolidity^0.4.0;contractHelloworld{stringMyname="lushuo";functiongetName()publicviewreturns(string){returnMyname;}functionchangeName(stringnewName)public{Myname=newName;}}给变量加上public之后,就会默认生成get方法。在Solidity中constant、view、pure三个函数修饰词的作用是

【以太坊 Solidity】管理员读写权限/访问控制/角色控制

摘要在Solidity语言的多继承中,若多个合约共同继承一个父合约,则这多个合约共享父合约中的变量和函数。1.测试的智能合约合约继承路线如下:#mermaid-svg-DtimeTjOch5CJh50{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DtimeTjOch5CJh50.error-icon{fill:#552222;}#mermaid-svg-DtimeTjOch5CJh50.error-text{fill:#552222;stroke:#55222

solidity实现智能合约教程(3)-空投合约

文章目录1介绍2主要功能3代码示例4部署测试猛戳订阅学习专栏🍁🍁👉solidity系列合约源码+解析👈🍁🍁1介绍空投就是一种营销策略,通过空投活动将某种数字货币或代币分发给用户,通常需要用户完成一项简单的任务,如分享新闻、介绍朋友或拥有某种数字货币,目前也被广泛应用于宣传新币种,在数字货币市场中反响不错。本文将和大家一起编写我们常见的糖果空投合约。“发送0个ETH到某个地址,立马获得5000枚Token,每个地址只能获取一次”,相信大家对于此类糖果空投的信息都已经遇见过很多次了,也有很多朋友趁此机会薅了很多羊毛。身为开发人员,我们不应只是简单的薅羊毛,更应该深入地去研究此类糖果空投的实现原理。

Hardhat 开发框架 - Solidity开发教程连载

Decert.me要连载教程了,《Solidity开发教程》力求系统、深入的介绍Solidity开发,同时这是一套交互式教程,你可以实时的修改教程里的合约代码并运行。本教程来自贡献者@Tiny熊,让我们正式开始学习吧。如果你已经是Hardhat的使用者,可以直接跳到文末,参与挑战领取技能认证NFT。Hardhat提供了一个灵活且易于使用的环境,可以轻松地编写、测试和部署智能合约。类似的开发工具或框架还有:RemixIDE,Truffle,Foundry,目前最受欢迎的是Hardhat与Foundry。Hardhat使用Node进行包管理,如果你熟悉Node及Javascript,Hardhat

Solidity 学习

这里写自定义目录标题Solidity与智能合约Solidity基础语法Solidity编译工具函数的关键字注释HelloWorld.sol数据类型函数简介变量只读函数默认值常量If-ElseForAndWhileError构造函数返回值Solidity与智能合约Solidity是一门面向合约,为实现智能合约而创建的高级编程语言智能合约:“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”智能合约的本质:数字话合同特点:代码代替人仲裁和执行合同,同时能够触发支付Solidity基础语法数量类型值类型(值传递)booltrue/false定义

solidity进阶第四课——在合约中创建新合约

在以太坊上,用户(外部用户)可以创建智能合约,智能合约同样也可以创建新的智能合约。去中心化交易所uniswap就是利用工厂合约(Factory)创建了无数个币对合约(Pair)。这一讲将讲如何在合约中创建合约。create和create2有两种方法可以在合约中创建合约,create和create2,这里我们讲create,下一讲会介绍create2。create的用法很简单,就是new一个合约,并传入新合约构造函数所需参数:Contractx=newContract{value:_value}(params)其中Contract是要创建的合约名,x是合约对象即地址,如果构造函数是payable

Solidity合约中Merkle Root验证的一点实践

背景在上一篇文章"Solidity合约中签名验证的一点实践"中提到过,白名单机制一般有两种,除了签名验证的方式外,就是本文讲述的MerkleRoot验证的方式。主要做法是在服务端对白名单地址列表整体构建Merkle树,计算出树的roothash,合约只需存储这个Merkle的根哈希值就可以了。由于Merkletree的构建,不需要任何私钥,所以安全性有很大提升,目前大多数新项目都会采用这个方法。整体交互流程和签名验证比较相似,大致为:后端预先收集所有的白名单地址,构建出完整的Merkle树用户在前端网页操作发起premint时,弹出信息提示用户对该请求进行签名请求发到后端,后端校验签名后,查询

php - LARAVEL:如何使用SOLID原则的Open Close Principle?

我有以下结构来使用打开关闭原则classPayment{//thisisnotamodelclass//accordingtoOCprinciplethisclassshouldnotfocusontheimplementationprivate$paymentInterface;publicfunction__construct(PaymentInterface$paymentInterface){$this->paymentInterface=$paymentInterface;}//sostoremethoddoesnotknowwhichimplementationitwill