首页 > 其他分享 >solidity进阶(更新中)

solidity进阶(更新中)

时间:2024-05-03 17:35:02浏览次数:25  
标签:进阶 部署 solidity provider 更新 js Truffle truffle 合约

开启第二阶段,主要学习合约部署、测试和预言机。

CryptoZombies的教程是用Truffle,现在主流是Hardhat,但学一学思想也有益无害。

----------------------------

update 5.3 学完了Truffle部署合约,后面几节是部署到它们的Loom网络,就不写这几节的笔记了

  •  启动一个新的终端窗口,创建项目目录并cd进入该目录,运行npm install truffle -g安装 Truffle 并使其全局可用。安装Truffle后,运行 truffle init来初始化我们的新项目。它创建一组具有以下结构的文件夹和配置文件:
├── contracts
    ├── Migrations.sol
├── migrations
    ├── 1_initial_migration.js
└── test
truffle-config.js
truffle.js
  • contracts 是 Truffle 期望找到我们所有智能合约的地方。为了保持代码的组织性,我们还可以创建嵌套文件夹,例如 contracts/tokenstruffle init 会自动创建一个名为 Migrations.sol 的合约以及相应的迁移文件,用于跟踪您对代码所做的更改,它的工作方式是将更改历史记录保存在链上。因此,您不可能将相同的代码部署两次。
  • migrations 目录下的一个 migration 就是一个 JavaScript 文件,告诉 Truffle 如何部署智能合约。
  • test 目录放置单元测试,可以是JavaScript 或 Solidity 文件。合约一旦部署就无法更改,因此我们必须在部署智能合约之前对其进行测试。
  • truffle.js truffle-config.js 是配置文件,用于存储部署的网络设置。 Truffle 需要两个配置文件,因为在Windows上将truffle.jstruffle.exe放在同一个文件夹中可能会导致冲突。如果您运行的是 Windows,建议删除 truffle.js 并使用 truffle-config.js 作为默认配置文件。
  • 我们将使用 Infura 将代码部署到以太坊,但是Infura 不管理私钥,也就是它无法代表我们签署交易。由于部署智能合约需要 Truffle 签署交易,我们需要一个名为 truffle-hdwallet-provider 的工具,它的唯一目的是处理交易签名。由于truffle init 命令期望找到一个空目录,我们在运行 truffle init 之后安装 truffle-hdwallet-provider
  • 以太坊虚拟机无法直接理解我们编写的 Solidity 源代码,编译器将我们的智能合约“翻译”为机器可读的字节码,然后虚拟机执行字节码,并完成我们的智能合约所需的操作。我们将游戏项目的所有智能合约复制到 ./contracts 文件夹中,执行 truffle compile进行编译。此命令应创建构建工件(artifacts)并将它们放置在 ./build/contracts 目录中。构建工件由智能合约的“字节码”版本、ABI 以及 Truffle 用于正确部署代码的一些内部数据组成。避免编辑这些文件,否则 Truffle 可能会停止正常工作。
  • 如果要部署多个合约,则必须为每个合约创建单独的migration文件,Migrations 始终按顺序执行 - 1、2、3 等。从创建好的./contracts/1_initial_migration.js 开始,首先脚本告诉 Truffle 我们想要与 Migrations 合约进行交互,然后导出一个函数,该函数接受 deployer 对象作为参数,该对象充当您(开发人员)和 Truffle 部署引擎之间的接口。我们创建一个新的迁移文件 ./contracts/2_crypto_zombies.js来部署我们自己的合约。
var CryptoZombies = artifacts.require("./CryptoZombies.sol");
module.exports = function(deployer) {
  deployer.deploy(CryptoZombies);
};
  • 有几个公共以太坊测试网可让您在将合约部署到主网之前免费测试您的合约(请记住,一旦将合约部署到主网,就无法更改)。这些测试网络使用与主网不同的共识算法(通常是 PoA),并且以太币是免费的。我们将使用 Rinkeby,由以太坊基金会创建的公共测试网络。在部署之前,我们必须编辑配置文件来告诉 Truffle 我们想要部署到的网络。正常情况下,为了避免泄露您的助记词(或您的私钥),您应该从文件中读取它并将该文件添加到 .gitignore 。此处仅为演示方便。
// Initialize HDWalletProvider
const HDWalletProvider = require("truffle-hdwallet-provider");

// Set your own mnemonic here
const mnemonic = "YOUR_MNEMONIC";

// Module exports to make this configuration available to Truffle itself
module.exports = {
  // Object with configuration for each network
  networks: {
    // Configuration for mainnet
    mainnet: {
      provider: function () {
        // Setting the provider with the Infura Mainnet address and Token
        return new HDWalletProvider(mnemonic, "https://mainnet.infura.io/v3/YOUR_TOKEN")
      },
      network_id: "1"
    },
    // Configuration for rinkeby network
    rinkeby: {
      // Special function to setup the provider
      provider: function () {
        // Setting the provider with the Infura Rinkeby address and Token
        return new HDWalletProvider(mnemonic, "https://rinkeby.infura.io/v3/YOUR_TOKEN")
      },
      // Network id is 4 for Rinkeby
      network_id: 4
    }
  }
};
  • 在进行部署之前,请确保您的帐户中有足够的以太币。获取以太币用于测试目的的最简单方法是通过名为 faucet 的服务。我们推荐在 Rinkeby 上运行的Authenticated Faucet。在终端中运行 truffle migrate --network rinkeby 以把合约部署到 Rinkeby。如果是部署到主网,在测试合约后运行 truffle migrate --network mainnet
  • 为了防止私钥文件被推送到 GitHub,我们创建一个名为 .gitignore 的新文件,然后通过以下命令告诉GitHub,我们希望它忽略保存私钥的文件。我们还需要编辑 truffle.js 配置文件,定义一个从文件中读取私钥并初始化新的 HDWalletProvider 的函数。
touch .gitignore
echo mainnet_private_key >> .gitignore

----------------------------

 

标签:进阶,部署,solidity,provider,更新,js,Truffle,truffle,合约
From: https://www.cnblogs.com/Aikoin/p/18171394

相关文章

  • Web命令执行笔记(持续更新)
    Web命令执行笔记会将web命令执行的题目放到这篇博客来记录,方便自己日后查阅。XYCTF-ezRCE(只允许数字、$、<、\)<?phphighlight_file(__FILE__);functionwaf($cmd){$white_list=['0','1','2','3','4','5','6','7'......
  • 19.3 ADG备库,数据文件SCN不更新(Bug: 29056767),导致备库异常重启后,需要重新apply很久
    故障现象:一套19.3ADG备库,备库安装完集群补丁重启后,发现需要重新apply很久以前的归档日志。分析过程:1、备库安装完补丁后,启动备库的日志恢复功能,在启动过程中报错,详细的日志如下所示。2024-04-16T18:34:40.895637+08:00BeginningStandbyCrashRecovery. Startedlogm......
  • openGauss 更新表中数据
    更新表中数据修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。使用UPDATE命令更新现有行,需要提供以下三种信息:表的名称和要更新的字段名字段的新值要更新哪些行SQL通常不会为数据......
  • 重大更新!开源无代码 / 低代码平台 NocoBase v1.0 正式发布!
    NocoBase是一个极易扩展的开源无代码开发平台。完全掌控,无限扩展,助力你的开发团队快速响应变化,显著降低成本,不必投入几年时间和数百万资金研发,只需要花几分钟部署NocoBase。NocoBase中文官网官方文档在线Demov1.0里程碑历时3年,NocoBase迎来第一次根版本号升级,版本号......
  • mybatis乐观锁批量更新和单个更新
    拦截器packagecom.esolution.xreport.config;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;importorg.springframework.context.annotation.......
  • HTML一键打包APK工具一机一码功能更新 - 增强安全性
    HTML一键打包APK工具在上一个版本更新的时候,添加了一机一码功能,该功能上线以来,受到许多用户的喜爱。它可以方便的让APK只能在已经授权的手机上使用,能有效地保护APK作品,防止一些没有授权的传播。如果想要向用户收费或者限制使用范围,这个功能就非常适合。之前版本中,在HTML一键打包A......
  • 2023蓝帽杯初赛取证wp(待更新)
    2023蓝帽杯初赛取证wp(待更新)最近取证比赛好多,被迫学习(bushi初次接触取证,火眼都不会用,笑死。VC密码:Hpp^V@FQ6bdWYKMjX=gUPG#hHxw!j@M9目前只写了计算机取证部分。【计算机取证】请给出计算机镜像pc.e01的SHA-1值?[答案格式:大小写均可]23F861B2E9C5CE9135AFC520CBD849677522F5......
  • 【代码更新】标准差
     【代码更新】标准差每513个点中,对前512个取其标准差,最后一个点不在计算范围内;具体的过程是,将512点的平方和均值,减去,512个点的均值的平方方差=用平方和的均值减去均值的平方得到方差1//用平方和的均值减去均值的平方得到方差23moduledownSampling(4inp......
  • DataGear 5.0.0 新特性之图表追加更新模式
    DataGear企业版1.1.0已发布!http://datagear.tech/pro/DataGear在新发布的5.0.0版本中,新增了图表追加更新模式支持,包括dgUpdateAppendMode图表选项,以及chart.updateAppendMode()函数,可以非常方便地制作具有追加更新效果的图表,比如实时曲线图、柱状图等。在5.0.0版本之前,......
  • VS和jetbrains比较容易忘记的几个快捷键(更新至20230428)
    //PS:这几个是我经常忘记的,记录一下,//         暂时只记录用到的,其他的用到后再去补充添加,后面会陆续补充。 VS2022Ctrl+T :在所有代码里面搜索的快捷键,(不是Ctrl+Q)快速搜索并定位文件名称的快捷:在当前文件快速搜索函数名称的快捷键: JetBrains在所有......