经济下行阶段,一个 37 岁失业程序员的独白(经历/经验分享)
警告:区块链投资高风险,需要谨慎,谨慎,再谨慎!
实战案例四:DeFi 去中心化交易所
现实情况是期望代币可以在去中心化的交易场所中交换,这篇文章就是从一个简单案例来说明交换,流动性该如何实现。 我们需要先梳理一下,期望这个应用具备哪些功能:只用一个代币对建立交易场所交易收取 1% 的费用用户可以为 UseWeb3Token 添加或删除流动性为用户提供 LP 代币说明:实现会比这个例子复杂的多// SPDX-License-Identifier: SEE LICENSE IN LICENSE pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract UseWeb3Exchange is ERC20 { address public useweb3TokenAddress; constructor(address useweb3TokenContract) ERC20("LP Token", "LP") { useweb3TokenAddress = useweb3TokenContract; } function getReserve() publ...
初识 Solidity 和 OpenZeppelin
Solidity 是一种面向对象的高级静态语言,用于实现智能合约,运行于 以太坊虚拟机,它支持继承,库和自定义类型等。pragma solidity ^0.8.0; contract HelloWorld { } Solidity 有三种类型的变量,熟悉它是因为变量的范围是由它们声明的位置所决定的:Local在函数内部声明且不存储在区块链上State存储在区块链上Global提供区块链相关的信息,它在运行时由以太坊虚拟机注入包括交易发送者,区块时间戳,区块哈希等全局变量语法知识,请阅读:https://docs.soliditylang.org/en/v0.8.9/index.html初识 OpenZeppelin说明:OpenZeppelin 是一家以太坊安全公司,其为流行的智能合约标准开发了一组合约,这些合约经过了大量的测试和安全审查,所以如果我们需要实现这些标准合约时,应该尝试找到 OpenZeppelin 提供的合约,而不是重头开始重写整个标准。https://github.com/OpenZeppelin/openzeppelin-contracts在 useweb3 ...
Dev
经济下行阶段,一个 37 岁失业程序员的独白(经历/经验分享)
警告:区块链投资高风险,需要谨慎,谨慎,再谨慎!
实战案例四:DeFi 去中心化交易所
现实情况是期望代币可以在去中心化的交易场所中交换,这篇文章就是从一个简单案例来说明交换,流动性该如何实现。 我们需要先梳理一下,期望这个应用具备哪些功能:只用一个代币对建立交易场所交易收取 1% 的费用用户可以为 UseWeb3Token 添加或删除流动性为用户提供 LP 代币说明:实现会比这个例子复杂的多// SPDX-License-Identifier: SEE LICENSE IN LICENSE pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract UseWeb3Exchange is ERC20 { address public useweb3TokenAddress; constructor(address useweb3TokenContract) ERC20("LP Token", "LP") { useweb3TokenAddress = useweb3TokenContract; } function getReserve() publ...
初识 Solidity 和 OpenZeppelin
Solidity 是一种面向对象的高级静态语言,用于实现智能合约,运行于 以太坊虚拟机,它支持继承,库和自定义类型等。pragma solidity ^0.8.0; contract HelloWorld { } Solidity 有三种类型的变量,熟悉它是因为变量的范围是由它们声明的位置所决定的:Local在函数内部声明且不存储在区块链上State存储在区块链上Global提供区块链相关的信息,它在运行时由以太坊虚拟机注入包括交易发送者,区块时间戳,区块哈希等全局变量语法知识,请阅读:https://docs.soliditylang.org/en/v0.8.9/index.html初识 OpenZeppelin说明:OpenZeppelin 是一家以太坊安全公司,其为流行的智能合约标准开发了一组合约,这些合约经过了大量的测试和安全审查,所以如果我们需要实现这些标准合约时,应该尝试找到 OpenZeppelin 提供的合约,而不是重头开始重写整个标准。https://github.com/OpenZeppelin/openzeppelin-contracts在 useweb3 ...
Dev

Subscribe to icepy

Subscribe to icepy
<100 subscribers
<100 subscribers
Share Dialog
Share Dialog
俗话说:“工欲善其事,必先利其器”,在进入实际编码阶段我们先来了解两个有用的工具,Remix 和 Hardhat。
Remix 是一款开发以太坊智能合约的 IDE,它可帮助开发者直接在浏览器中编写 Solidity 代码,并且提供用于测试、调试和将智能合约部署到区块链的工具。
也提供桌面版

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Hello{
string text;
constructor(){
text = "Hello Remix";
}
function say() public view returns (string memory) {
return text;
}
}
左侧菜单栏从上至下分别是:工程目录,编译,部署,Debug,插件和设置;
点击第二个菜单,这里是编译器选项(Remix 默认保存即自动变易),可在此处手动编译,COMPILE 可以选择编译器的版本;
注意 LANGUAGE 也列出了另外一种语言,它可用于中间编译,比 Solidity 更接近硬件。

编译成功后,点击第三个菜单,我们可以将合约发布到测试网或本地网络,ENVIRONMENT 有四个选项,大部分情况下默认即可。需要注意的是 Remix 附带了一个 JS VM,这是浏览器中以太坊 EVM 的模拟器,只要你的合约不依赖真实网络中另一个合约,这里可以快速的测试和调试合约。
如果你想将合约部署到真实的网络,比如 rinkeby 测试网络,首先你需要在 metamask 上将网络选择为 rinkeby,然后在 ENVIRONMENT 中选择 Injected Web3 并连接钱包,最后点击 Deploy 来部署合约。


接下来,你可以在下方点击 say 函数来进行测试。

如果你需要 DEBUG ,那么合约需要在 JS VM 中部署,然后在控制台的信息中点击 debug 开启此功能。

Hardhat 是一个用于编译、部署、测试和调试以太坊软件的开发环境,大多数情况我都只使用 Hardhat。
建议安装 Hardhat VSCode Plugin
它帮助开发人员管理和自动化构建智能合约和 dApp 过程中固有的重复性任务,以及围绕此工作流程轻松引入更多功能。这意味着编译、运行和测试最核心的智能合约。 Hardhat内置了安全帽网络,这是一个专为开发而设计的本地以太坊网络。它的功能侧重于 Solidity 调试,具有堆栈跟踪、console.log() 和事务失败时的显式错误消息。
它与 Remix 相比更有开发的氛围,因为你需要通过代码来编写部署的脚本,需要命令来启动编译,部署,测试等环节,这个工具更易在工程流水线中进行集成。
它的命令不多,主要有四个:
hardhat node 在本地启动一个节点
hardhat compile 编译
hardhat run 运行脚本
hardhat test 运行测试
hardhat.config.js 文件是 hardhat 的灵魂核心
module.exports = {
solidity: "0.8.4",
networks: {
rinkeby: {
url: "网络",
accounts: ["私钥"],
},
mumbai: {
url: "网络",
accounts: ["私钥"]
}
},
etherscan: {
apiKey: {
polygonMumbai: "API-KEY"
}
}
};
上述相当于是配置了多个网络,一般来说我们将部署脚本编写在 scripts 目录中,多数都起名叫 deploy.js,因此如果我们要将合约部署到 rinkeby 测试网络,只需运行如下命令:
$ hardhat run scripts/deploy.js --network rinkeby
至于部署脚本,用例都非常简单:
const hre = require('hardhat');
async function deploy(){
const HelloContractFactory = await hre.ethers.getContractFactory('Hello');
const helloContract = await HelloContractFactory.deploy(1000);
await helloContract.deployed();
console.log('deploy address', helloContract.address);
}
deploy()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
更深入详细的用例,请阅读和学习 Hardhat 文档。
俗话说:“工欲善其事,必先利其器”,在进入实际编码阶段我们先来了解两个有用的工具,Remix 和 Hardhat。
Remix 是一款开发以太坊智能合约的 IDE,它可帮助开发者直接在浏览器中编写 Solidity 代码,并且提供用于测试、调试和将智能合约部署到区块链的工具。
也提供桌面版

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Hello{
string text;
constructor(){
text = "Hello Remix";
}
function say() public view returns (string memory) {
return text;
}
}
左侧菜单栏从上至下分别是:工程目录,编译,部署,Debug,插件和设置;
点击第二个菜单,这里是编译器选项(Remix 默认保存即自动变易),可在此处手动编译,COMPILE 可以选择编译器的版本;
注意 LANGUAGE 也列出了另外一种语言,它可用于中间编译,比 Solidity 更接近硬件。

编译成功后,点击第三个菜单,我们可以将合约发布到测试网或本地网络,ENVIRONMENT 有四个选项,大部分情况下默认即可。需要注意的是 Remix 附带了一个 JS VM,这是浏览器中以太坊 EVM 的模拟器,只要你的合约不依赖真实网络中另一个合约,这里可以快速的测试和调试合约。
如果你想将合约部署到真实的网络,比如 rinkeby 测试网络,首先你需要在 metamask 上将网络选择为 rinkeby,然后在 ENVIRONMENT 中选择 Injected Web3 并连接钱包,最后点击 Deploy 来部署合约。


接下来,你可以在下方点击 say 函数来进行测试。

如果你需要 DEBUG ,那么合约需要在 JS VM 中部署,然后在控制台的信息中点击 debug 开启此功能。

Hardhat 是一个用于编译、部署、测试和调试以太坊软件的开发环境,大多数情况我都只使用 Hardhat。
建议安装 Hardhat VSCode Plugin
它帮助开发人员管理和自动化构建智能合约和 dApp 过程中固有的重复性任务,以及围绕此工作流程轻松引入更多功能。这意味着编译、运行和测试最核心的智能合约。 Hardhat内置了安全帽网络,这是一个专为开发而设计的本地以太坊网络。它的功能侧重于 Solidity 调试,具有堆栈跟踪、console.log() 和事务失败时的显式错误消息。
它与 Remix 相比更有开发的氛围,因为你需要通过代码来编写部署的脚本,需要命令来启动编译,部署,测试等环节,这个工具更易在工程流水线中进行集成。
它的命令不多,主要有四个:
hardhat node 在本地启动一个节点
hardhat compile 编译
hardhat run 运行脚本
hardhat test 运行测试
hardhat.config.js 文件是 hardhat 的灵魂核心
module.exports = {
solidity: "0.8.4",
networks: {
rinkeby: {
url: "网络",
accounts: ["私钥"],
},
mumbai: {
url: "网络",
accounts: ["私钥"]
}
},
etherscan: {
apiKey: {
polygonMumbai: "API-KEY"
}
}
};
上述相当于是配置了多个网络,一般来说我们将部署脚本编写在 scripts 目录中,多数都起名叫 deploy.js,因此如果我们要将合约部署到 rinkeby 测试网络,只需运行如下命令:
$ hardhat run scripts/deploy.js --network rinkeby
至于部署脚本,用例都非常简单:
const hre = require('hardhat');
async function deploy(){
const HelloContractFactory = await hre.ethers.getContractFactory('Hello');
const helloContract = await HelloContractFactory.deploy(1000);
await helloContract.deployed();
console.log('deploy address', helloContract.address);
}
deploy()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
更深入详细的用例,请阅读和学习 Hardhat 文档。
No activity yet