Skip to content

Commit c9236d4

Browse files
committed
add solidity parts
1 parent 5be5a1e commit c9236d4

File tree

336 files changed

+57283
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

336 files changed

+57283
-0
lines changed

test_solidity/1_simple_readwrite.sol

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// SPDX-License-Identifier: GPL-3.0
2+
3+
pragma solidity >=0.7.0 <0.9.0;
4+
5+
// - 实现一个简单的读(retrieve)和写(store)的名字叫做Storage的合约
6+
// 1. 合约部署后,可以在通过某些方式调用/查询合约中通过 public 关键字暴露给外部调用的 函数 或 变量,如果函数有参数,则需要传入参数
7+
8+
/**
9+
* @title Storage
10+
* @dev Store & retrieve value in a variable
11+
* @custom:dev-run-script ./scripts/deploy_with_ethers.ts
12+
*/
13+
contract Storage {
14+
15+
uint256 public number;
16+
17+
/**
18+
* @dev Store value in variable
19+
* @param num value to store
20+
*/
21+
function store(uint256 num) public {
22+
number = num;
23+
}
24+
25+
/**
26+
* @dev Return value
27+
* @return value of 'number'
28+
*/
29+
function retrieve() public view returns (uint256){
30+
return number;
31+
}
32+
}

test_solidity/2_use_openzeppelin.sol

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.4;
3+
4+
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
5+
import "@openzeppelin/contracts/utils/Address.sol";
6+
7+
/*
8+
9+
OpenZeppelin库介绍
10+
- 是以太坊生态中一个了不起的项目,它提供了许多经过社区反复审计及验证的合约模板(如ERC20,ERC721)及函数库如SafeMath,开发者可以使用
11+
这些现有的模板代码进行项目开发,可以提高项目的开发效率以及安全性。
12+
13+
- 子目录用途介绍
14+
- cryptography 加解密,实现了椭圆曲线签名和merkle证明工具
15+
- introspection 合约自身可提供的函数接口,目前主要实现了ETC165和ERC1820
16+
- math 数学运算
17+
- token 实现了ERC20、ERC721、ERC777
18+
- ownership 实现了合约所有权
19+
- access 实现了合约函数的访问控制功能
20+
- crowdsale 实现了合约众筹、代币定价等功能
21+
- lifecycle 实现了生命周期功能,如可暂定、可销毁操作
22+
- payment 实现了合约资金托管、如支付、充值、取回、悬赏等功能
23+
- utils 一些工具方法,如判断是否为合约地址、数组操作、函数可重入的控制
24+
25+
下面代码介绍了其中的一些功能使用方法
26+
*/
27+
28+
29+
contract TestMath {
30+
// 为类型关联方法,以便后续这个类型可以直接调用关联的方法
31+
using SafeMath for uint256;
32+
33+
function testDiv(uint256 a, uint256 b) public pure returns (uint256) {
34+
return a.div(b); // 调用SafeMath提供的div方法,这个方法没有做特别处理,与a/b一致,若b=0则合约执行中断,所有改变回滚
35+
}
36+
37+
function testTryDiv(uint256 a, uint256 b) public pure returns (bool, uint256) {
38+
return a.tryDiv(b); // 调用SafeMath提供的安全的除法方法,b=0不会导致中断,会返回一个bool字段以供下一步处理
39+
}
40+
}
41+
42+
// Address对象提供了一些方法
43+
// - 比如isContract判断一个地址是否是有效的合约地址,其内部是通过参数地址所关联的EVM代码的字节码长度是否大于0来判断的。
44+
contract TestAddress{
45+
using Address for address;
46+
function isContract(address acc) public view returns(bool) {
47+
// return Address.isContract(acc);
48+
return acc.isContract();
49+
}
50+
}

test_solidity/node_modules/.package-lock.json

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test_solidity/node_modules/@openzeppelin/contracts/README.md

+84
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)