狗哥区块链与AI精品内容集@NonceGeek

2025年03月28日更新 75 人订阅
原价: ¥ 20 限时优惠
专栏简介 「造」最关键的是什么?| Hackathon 漫游指南(贰) Why Hackathon?| Hackathon 漫游指南(壹) 设计「众人维护」的 BuidlerBoard | BeWater.xyz Movement 白皮书中文版 Rebuidl RSS 生产因素与反生产因素 | 独立黑客创业手册(陆) 组织 | 独立黑客创业手册(伍) 生产 | 独立黑客创业手册(肆) 销售 | 独立黑客创业手册(叄) 最优先的能力 | 独立黑客创业手册(贰) 为什么从独立黑客开始 | 独立黑客创业手册(壹) Aptos Token Object V2 | Move dApp 极速入门(贰拾肆) 可編程交易塊 | Move dApp 極速入門(貳拾叁) Aptos 密鑰輪換 | Move dApp 極速入門(貳拾貳) Aptos 对象模型 | Move dApp 极速入门(贰拾壹) Aptos Moveflow SDK使用指南 | Move dApp 极速入门(贰拾) Sui 上简单 Swap 的实现 | Move dApp 极速入门(拾玖) 用 Elixir 交互 Aptos | Move dApp 极速入门(拾捌) Sui 链上数据查询 | Move dApp 极速入门(拾柒) SUI 合约测试攻略 | Move dApp 极速入门(拾陆) Sui 数据类型详解 | Move dApp 极速入门(拾伍) Airdropper Contract in Aptos | Move dApp 极速入门(拾肆) Sandwich合约源码解析 | Move dApp 极速入门(拾叁) Sui 极速上手 | Move dApp 极速入门(拾贰) scaffold-aptos 脚手架 | Move dApp 极速入门(拾壹) 对 DID Document 的思考 | Move dApp 极速入门(九) DID中地址聚合器的实现 | Move dApp 极速入门(八) 值的存取应用3.0 | Web3.0 dApp 开发(五) 合约数据类型综述 | Move dApp 极速入门(四) 操作资源 | Move dApp 极速入门(三) 第一个 Move dApp | Move dApp 极速入门(二) Hello Move | Move dApp极速入门(一) Staker | Web3.0 dApp 开发(九) Token 自动售卖机 | Web3.0 dApp 开发(七) SVG NFT 全面实践 | Web3.0 dApp 开发(六) 值的存取应用2.0 | Web3.0 dApp 开发(四) 值的存取应用1.0 | Web3.0 dApp开发(三) Scaffold-eth 快速上手 | Web3.0 dApp 开发(二) eth.build 快速上手 | Web3.0 dApp 开发(一) 1 小时理解比特币系统 【NonceGeek Workshop 0x01总结】基于链上数据生成游戏地图 Remix 完全本地化部署 NFT:实体与虚拟载体的主与辅 | 狗哥的元宇宙思辨(一) Web3Camp 内容大全@NonceGeek 用 Python 创建一条 Pow 区块链(上) 区块链与共识机制演变史 基于 Etherscan 实现 Blockchain Syncer 【论文分享】去中心化社会:寻找 Web3 的灵魂(上) 【论文分享】去中心化社会:寻找 Web3 的灵魂(下) Ted Yin | 2021 年的区块链基础设施将是什么? 0. 公链、联盟链与分布式未来(全文) 基于 Infura 与 Web3py 部署调用 Hello 合约全过程 | 以太坊开发极速入门 太上中的基因设计与Binary | 函数式与区块链(一) 理解以太坊合约数据读取过程 | 函数式与区块链(二) Hello, Ink! | 用 Rust 写智能合约(一) Mapping 数据结构 | 用 Rust 写智能合约(二) 用 Rust 程序和 Webase 交互 | Rust 学习笔记(四) 用 Sqlite 存储 WeId | Rust 学习笔记(五) 链上注册WeId与错误处理 | Rust 学习笔记(六) WeId 链上创建与本地存储的完整闭环 | Rust 学习笔记(七) 以太坊上的核心开发者 Austin | 以太坊上的最佳开发实践 1. FISCO BCOS 开发环境节点搭建全攻略 伪代码简述 ECDSA 签名过程 | 联盟链开发 WeIdentity 源码分析 | 狗哥解码 WeIdentity 源码分析 | 狗哥解码 FISCO BCOS 介绍 | 联盟链开发 给Remix升个级 | 联盟链开发 2. 控制台的安装与使用 3. 【实验】补全一个区块链应用 4. 控制台的Web化 5. Web化控制台2.0:打造团队共用区块链学习平台 6. 使用脚手架快速搭建 Java DApp 【视频+文字】分布式思维 Rebuidl RSS (EN)

值的存取应用2.0 | Web3.0 dApp 开发(四)

  • 李大狗
  • 发布于 2021-12-08 09:56
  • 阅读 4671

Eth-Scaffold 之旅~

在 1.0 的版本中,我们创建了一个简单的存值读值的dApp及其配套合约,并将其部署到了 Github-Pages上。

今天,我们对 1.0 的版本进行升级,让他变得更酷,我们甚至能给这个应用设计一个简单的经济模型!

注: 本文对 Austin Griffith 的分享有所参考——

https://mp.weixin.qq.com/s/cKQkg_q9vjmE9nWL08IajQ

Repo URL:

https://github.com/leeduckgo/set-purpose

https://github.com/leeduckgo/set-purpose-contracts

0x01 让合约文件夹成为项目的子 Repo

在 Repo 中,我们会注意到 contracts 文件夹中实质存放的是另一个 Repo,这里用到了 git 中的submodule功能。

对于智能合约来说,这样做的好处是,可能对于同一个dApp来说,有不同的合约版本。例如对于 NFT 项目来说,有普通版、白名单版、可升级版等等,这个时候设置智能合约为 submodule,那么我们就可以在该文件夹中独立切换合约了。而不用再把合约移来移去。

以下是一些submodule相关的git操作:

# 在该目录下添加 submodule
git submodule add submodule-repository-URL
# example: 
# git submodule add https://github.com/leeduckgo/set-purpose-contracts.git

# 在 clone 的时候即下载子模块
git clone --recurse-submodules repository-URL

# 手动拉取指定 submodule
git submodule update --init folder-path
# example:
# git submodule update packages/hardhat/contracts --init

0x02 给 setPurpose 函数加上权限控制

在原有的 PurposeHandler 基础上,我们通过 require 语句给 setPurpose 函数添加了权限控制。当合约调用人不是构造函数中赋值的owner的时候,就会报错并不执行下面的语句。

pragma solidity >=0.8.0 <0.9.0;
//SPDX-License-Identifier: MIT

import "hardhat/console.sol";

contract PurposeHandler {

  //event SetPurpose(address sender, string purpose);

  string public purpose = "Building Unstoppable Apps";
  address public owner = 0x7EF99B0E5bEb8ae42DbF126B40b87410a440a32a;
  // 这里填写你自己的地址

  constructor() {

    // owner = msg.sender;
  }

  function setPurpose(string memory newPurpose) public {
      // about msg.sender:
      // https://cryptozombies.io/en/lesson/2/chapter/3
      // about require:
      // https://cryptozombies.io/en/lesson/2/chapter/4
      require( msg.sender == owner, "NOT THE OWNER!");

      purpose = newPurpose;
      console.log(msg.sender,"set purpose to",purpose);
      //emit SetPurpose(msg.sender, purpose);
  }
}

TIPS:

关于 msg.sender: https://cryptozombies.io/en/lesson/2/chapter/3

关于 require: https://cryptozombies.io/en/lesson/2/chapter/4

回到 set-purpose 根目录,启动本地链、部署合约、启动dApp:

export SKIP_PREFLIGHT_CHECK=true # 设置环境变量
yarn chain # 启动链
yarn deploy # 部署合约
yarn start # 启动dApp

image-20211029132355937

访问http://localhost:3000

由 Owner 发起交易的演示:

set_purpose_v0x02

非 Owner 发起交易:

set_purpose_v0x02-wrong

TIPS:

如果账户发生 Nonce 相关错误,重置 Nonce 即可:

Metamask > Settings > Advanced > Reset Account



slogan.jpeg


点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论