首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟我学 Solidity :合约创建和继承

在上一篇文章[4],我们看到了如何使用函数,运用了到目前为止所学到一切来构建一个多签名钱包。 在本文中,我们将看到如何从一个合约创建另一个合约,以及如何定义抽象合约和接口。...首先,我们将创建一个新项目通过执行以下命令对其进行初始化: > mkdir token > cd token > truffle init 打开项目,更新truffle-config.js文件,设置部署合约节点...现在,我们可以在contracts文件创建合约文件TokenCreator.sol,复制前面的代码粘贴.在migrations文件创建一个迁移文件,以部署TokenCreator合约。...将其命名为2_deploy_token.js,然后复制粘贴以下代码。...我们现在要做是检索已部署TokenCreator实例。然后,进行两次调用createToken函数,保存每个新创建合约地址。 ?

1.3K10

用Hardhat和Ethers引入测试知名NFT智能合约

但是现在让我们以手动方式进行,如何使用代码来更有效获取合约代码,可以作为一个练习题 :) 就要完成了第 1 步 - 复制合约代码并将其保存文件 - 现在你可以将其放在记事本将其保存在某个文件...hardhat.config.ts 文件里配置): mdkir contracts 在 contracts 文件创建一个名为“bored-ape.sol文件,然后粘贴我们之前从 Etherscan.... sol 文件我们最终会在 artifacts/contracts/bored-ape.sol/ 文件得到 30 个文件。...然而,当使用 TypeScript 时,没有全局范围内可用的上下文,所以我们必须显式地导入实例。 让我们在根目录下 test 文件夹中新建一个测试,命名为 bored-ape.test.ts。...让我们为该函数编写一个测试,这将让我们尝试支付,迫使我们使用合约其他一些方法来使测试通过。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

sklearn 模型保存与加载

在我们基于训练集训练了 sklearn 模型之后,常常需要将预测模型保存文件,然后将其还原,以便在新数据集测试模型或比较不同模型性能。...=False) 使用 Pickle 模块 在下面的几行代码,我们会把上面得到模型保存到 pickle_model.pkl 文件,然后将其载入。...Pickle要求将文件对象作为参数传递,而 Joblib可以同时处理文件对象和字符串文件名。如果您模型包含大型数组,则每个数组将存储在一个单独文件,但是保存和还原过程将保持不变。...首先,创建一个对象 mylogreg,将训练数据传递给它,然后将其保存文件。然后,创建一个新对象 json_mylogreg 调用 load_json 方法从文件中加载数据。...而且,这种方法更适用于实例变量较少对象,例如 sklearn 模型,因为任何新变量添加都需要更改保存和载入方法。

8.9K43

如何用Python和Flask框架开发以太坊智能合约

将数据存储在数据库是任何软件应用程序不可或缺一部分。无论如何控制该数据库都有一个该数据主控。区块链技术将数据存储到区块链网络内区块。...我们将它存储在区块链,它是不可变。 ? 环境要求 Python 3.6 安装 1.创建一个python虚拟环境。...Virtualenv将你Python软件包本地化保存在你项目的虚拟环境,而不是强迫你在系统范围内安装软件包。...在下面的文件,我们使用getter,setter函数构建简单用户合约。 1.在.sol文件声明solidity编译器版本。...我们API用户将从客户端获取数据(curl请求)对其进行验证将其返回给客户端(curl请求) 2.现在我们将初始化web3对象以与已部署用户合约进行通信。

1.6K30

一个真实区块链项目的演练:以太坊Voting Dapp

另一个原因在于,投票是很多复杂去中心化应用基础构件,所以我们选择了投票应用作为学习区块链应用开发一个项目。...image 在每个以太坊全节点中,都保存有完整区块链数据。以太坊不仅将交易数据保存在链,编译后合约代码同样也保存在链。...使用ganache软件来模拟区块链节点,以便快速开发测试应用。 接下来,我们将编写一个投票合约,然后编译合约并将其部署到区块链节点 ganache。 投票合约主要接口: ?...文件内容,然后使用编译器(solc)compile()方法 对合约代码进行编译: > code = fs.readFileSync('Voting.sol').toString()> solc =...页面文件JS代码都封装在了一个单独JS文件,可以在试验环境编辑器打开 ~/repo/chapter1/index.js来查看其内容。

1.3K70

深入Solidity数据存储位置 - 内存

备注:计算机,通常把单位处理数据大小称为一个字长,简称字 EVM 内存也是易失。存储在内存值在外部调用之间不会持续存在。 当一个合约调用另一个合约时,会获得一个内存实例。...在 Solidity 在 Solidity ,每当你用memory关键字实例一个变量赋值(bytes/字符串,或者函数返回值),底层 EVM 就会执行mstore指令。...下面是 ENS DNSRegistar.sol合约一个例子: 来源:Github ENS 源代码 DNSRegistar.sol[15] 在汇编 mstore操作码可以在内联汇编中使用。...来源:GBSPS/solidity-bytes-utils on Github, BytesLib.sol[23] 内存引用作为函数参数 在 Solidity ,当我们必须将一个动态或复杂类型参数传递给一个函数时...在外部调用之间,获得一个清晰内存实例。 事实,EVM 内存一个实例对于每个合约和当前执行环境都是特定。这意味着,在每一个合约交互,都会获得一个清空内存。

1.7K40

愁! 个人私照存哪里? 这个假冒伪劣Instagram了解下?

InstagramPosting.sol 上面这段代码,已经创建了一个名为 Post(动态发布)结构体。...InstagramPosting.sol 接下来就是 sendHash (发送哈希值)函数,IPFS 文件系统在保存了用户上传数据(如参数 _img 和 _text 所示,这里数据是指用户图片)...InstagramPosting.sol 设置 Web3.js ,智能合约实例和 IPFS 为方便开发,本文提供了一个带有前端页面的模板项目,所有的讲解也都建立在这个模板项目,首先你需要克隆这个模板项目...常量变量,并在其实例化 Web3 。...然后在 contract 文件夹下 contractInstance.js ,你将使用 ABI 创建智能合约实例声明智能合约地址,因为在实际使用,你需要 ABI 以及智能合约地址才能连接到以太坊智能合约

91130

如何在Solana铸造一个NFT

在本指南中,我们将以编程方式创建 2 个独立账户,一个账户用于铸造 NFT,另一个账户将接收 NFT。然后编写代码,在 Solana 完成 NFT 铸币和发送。...第 4 行:请求向我们钱包 air-drop 资金。requestAirdrop() 方法需要一个公钥和你想收到 SOL lamports 数量。...在我们例子,LAMPORTS_PER_SOL一个常数,代表 1 SOL Lamports 数量。...铸造 NFT 并发送 现在是时候铸造一个 NFT 并将其发送给某人,花点时间看看下面的代码,以实现这一目标,阅读注释以了解每个函数作用: // Minting 1 new token to the...要执行该程序,请相继运行以下命令: tsc index.ts node index.js 这两条命令将运行 TypeScript 文件,生成一个同名 JavaScript 文件运行该文件

1.8K30

区块链开发实战:如何从零打造一个去中心化应用

如果它恰好是区块链最新发布广告,那么该广告就会至少保留1天(直到另一个贡献者声明了一个PR为止)。 看起来有点意外是,区块链在这个过程起着非常小作用。...我们最终在测试makefile目标添加了一个命令,将这些sol-unit 合约复制到跟我们项目相同文件。之后再运行sol-unit就很简单了,我们可以开始继续写代码了。...基于我们合约运行新区块链整个过程如下所示: 重置任何正在运行eris docker容器,删除一些临时文件 启动eris密钥服务 生成我们账户密钥,并将其地址存储在一个便于稍后由JS API加载文件..., 生成genesis.json,这是区块链“区块0” 创建启动新区块链 将合约上传至区块链保存其地址,以便在需要时调用 几天工作之后,我们就能够在本地Eris区块链运行合约了。...请勿在EC2实例打开此端口!否则任何知道实例IP的人都可以控制你以太坊节点,窃取你以太网。 以太币和瓦斯(Gas) 在以太坊区块链中部署和调用合约并不是免费,需要承担一定计算代价。

2.3K60

使用Uniswap V2部署自己去中心化交易所

-periphery: 与核心合约交互边缘合约,主要就是路由合约uniswap-lib: 工具合约整合以上三个项目到一个项目中:uniswap-v2-corecore核心主要有三个合约文件:UniswapV2Factory.sol...: 工厂合约**UniswapV2Pair.sol:**配对合约**UniswapV2ERC20.sol:**LP Token 合约UniswapV2Pair.sol管理着流动性资金池,不同币对有着不同实例...,比UniswapV2Pair.sol, 如 USDT-WETH 这一个币对,就对应一个UniswapV2Pair.sol合约地址**,DAI-WETH 又对应另一个UniswapV2Pair.sol*...UniswapV2Factory.sol则是用来部署UniswapV2Pair.sol,通过工厂合约 createPair() 函数来创建新配对合约实例。...位于项目contracts/libraries/UniswapV2Library.sol文件pairFor函数:init code hash是UniswapV2Pairbytecode通过keccak

1.2K20

福利|评价超高《精通以太坊》丛书免费送,还包邮!手慢无

批量请求 可以允许将多个请求放入队列一起执行,方法如下所示。 ? 注意:批量请求并不会更快,批量请求主要目的是用来保证请求串行执行。实际同时发起多个请求会更快,因为请求是异步处理。...项目创建完成后,生成一个package.json文件保存项目信息及相关依赖。 然后运行命令,安装Web3.js。 ?...接着在Remix Run 标签也可以拷贝合约地址,将其复制到下面的代码。 ? 这时就完成了合约实例创建。 合约函数交互 使用合约实例调用合约函数。...contracts为智能合约文件夹,所有的智能合约文件都放置在这里。 migrations是用来处理部署(迁移)智能合约。迁移是用一个额外、特别的合约来保存。 test智能合约测试用例文件夹。...实例化合约 Truffle会帮我们保存合约部署信息,所以不用像本章第一个案例那样手动填写合约地址,修改initContract()代码如下。 ?

1.1K20

【Web3 开发系列教程—创建你一个智能合约(2)】部署第一个智能合约

将鼠标悬停在导航栏“应用程序”单击“创建应用程序”,导航到 Alchemy 仪表板“创建应用程序”页面: 将你应用命名为“Hello World”,提供简短描述,为环境选择“Staging...在命令行中导航到 hello-world 项目的根目录键入: mkdir contracts mkdir scripts contract: 是我们保存 hello world 智能合约代码文件地方...导航到“contracts”文件创建一个名为 HelloWorld.sol 文件 下面是我们将在本教程中使用来自以太坊基金会 Hello World 智能合约示例。...将以下内容复制粘贴到你 HelloWorld.sol 文件确保阅读注释以了解此合约作用: // 使用语义版本控制指定 Solidity 版本。...: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 请复制粘贴此地址以将其保存在某处,因为我们将在以后教程中使用此地址,因此你不想丢失它。

79220

如何利用OpenZeppelin编写可升级智能合约

首先,将创建一个.openzeppelin目录,其中包含项目相关信息。此目录将由CLI管理:您无需手动进行任何编辑。但是,应该将其中一些文件[14]提交给Git。...其次,CLI将网络配置存储在名为networks.js文件。为了方便起见,它已经填充了一个名为development条目,其配置与Ganache[15]默认值匹配。...## 编写及部署合约 现在,让我们在contracts文件创建一个名为TodoList合同。...我们可以尝试调用新合同getListSize()函数检查列表大小: ? 而已!请注意,在整个升级过程如何保留列表大小及其地址。...解决此问题最简单方法是避免完全自己创建合同:与其在initialize函数创建合同,不如简单地接受该合同实例作为参数,并在通过OpenZeppelin CLI创建合同后将其注入: //... contract

3.6K61

5年前, 以太坊大脑送给V神一份神秘大礼; 今天, V神将它给了你...

Solidity 语句终结符是分号(;)。 在扩展名为 .sol Solidity 文件编写 Solidity 代码。...名为 onlyBy() 修改器在合约级别被声明。它使用 msg.sender 检查传入地址值,msg.sender 保存地址并将其存储在状态变量。...更改原始或目标变量值不会影响另一个变量值。这两个变量将保持其独立值,并且它们可以在其他变量不知道情况下更改值。 2、引用类型 与值类型不同,引用类型不直接将其值存储在变量本身。...映射:与存储键值对其他语言中散列表或字典相似。 引用传递 当引用类型变量被赋给另一个变量时,或者当引用类型变量作为参数传送给函数时,EVM 会创建一个新变量实例并将指针从原始变量复制到目标变量。...是以太坊将其存储在环境每个节点永久存储。 内存:合约每个函数都可以访问本地内存。它是生命周期短暂内存,当函数执行完成后会被销毁。 调用数据:存储所有传入函数执行数据,包括函数参数。

1.8K20

ethers.js教程

如果你已经在以太坊开发过DApp,那你在前端JavaScript可能用过web3.js。...Metamask在浏览器 应用中有效地模拟了这种节点环境,因此绝大多数web3应用需要使用Metamask来保存密钥、签名交易完成与以太坊交互。...Ethers.js将“节点”拆分为两个不同角色: 钱包:负责密钥保存和交易签名 提供器:负责以太坊网络匿名连接、状态检查和交易发送 1、编译、部署智能合约 在这个教程我们将与一个ERC20智能合约交互...1.1 创建项目文件夹 首先创建一个文件夹ethers-template,然后再这个文件夹里再创建另一个contracts文件夹: ~$ mkdir -p ethers-template/contracts...\n'); } else { console.log('\nBuild failed\n'); } 上面的代码将读入编译contracts目录所有合约文件,然后将编译得到abi和字节码保存

6K41

图解Redis

主要来说,Redis 是一个内存数据库,用作另一个 “真实” 数据库(如 MySQL 或 PostgreSQL)前面的缓存,以帮助提高应用程序性能。...然后,如果在这些实例设置了持久性,则在某个时间间隔上会有一个 fork 进程,来生成数据持久化 RDB(Redis 数据非常紧凑时间点表示)快照或 AOF(仅附加文件)。...所以集群每个 Redis 实例都被认为是整个数据一个分片。 这带来了一个问题。如果我们向集群推送一个 key,我们如何知道哪个 Redis 实例(分片)保存了该数据?...通过这样做,我们只需要将 hashlot 从一个分片移动到另一个分片,简化将新实例添加到集群过程。 这可以在没有任何停机时间和最小性能影响情况下实现。让我们通过一个例子来谈谈。...在许多用例,如果你丢失了 Redis 存储数据,这并不是世界末日。将其用作缓存或在其支持实时分析情况下,如果发生数据丢失,则并非世界末日。

39520

多图深入理解 Redis

主要来说,Redis 是一个内存数据库,用作另一个“真实”数据库(如 MySQL 或 PostgreSQL)前面的缓存,以帮助提高应用程序性能。...然后,如果在这些实例设置了持久性,则在某个时间间隔上会有一个fork进程,来生成数据持久化 RDB(Redis 数据非常紧凑时间点表示)快照或 AOF(仅附加文件)。...所以集群每个 Redis 实例都被认为是整个数据一个分片。 这带来了一个问题。如果我们向集群推送一个key,我们如何知道哪个 Redis 实例(分片)保存了该数据?...通过这样做,我们只需要将 hashlot 从一个分片移动到另一个分片,简化将新实例添加到集群过程。 这可以在没有任何停机时间和最小性能影响情况下实现。让我们通过一个例子来谈谈。...在许多用例,如果你丢失了 Redis 存储数据,这并不是世界末日。将其用作缓存或在其支持实时分析情况下,如果发生数据丢失,则并非世界末日。

53130

结合 Hardhat 使用 Web3

这将修改Hardhat运行时环境 - HRE,包括Web3类和实例web3对象。...编写智能合约 我们开始新项目的时候,Hardhat提供了一个简单Lock合约。我们可以参考myproject/contracts/Lock.sol文件。...是一个简单时间锁定合约,在部署时接受任意数量Ether,期望一个在部署时将被赋值给状态变量参数。...为了从区块链读取owner数据,我们使用了已部署合约一个实例,即lock.methods.owner().call()。调用.call()不会改变区块链状态,因此不需要钱包签名。...为了改变我们之前保存数据状态,我们需要访问我们所需功能方法容器,调用.send来向网络广播我们意图lock.methods.withdraw().send({from: deployer})。

7110
领券