Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | Github | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

第 8 章 智能合约语言 Solidity v0.5.0

本文作者最近在找工作,有意向致电 13113668890

目录

8.1. Remix
8.1.1. NodeJS
8.1.2. Remix Project
8.1.3. Remix 桌面版
8.1.4. 输入数组
8.2. solc 命令
8.2.1. 使用 solc 编译 *.sol 代码
8.3. 智能合约入门演示
8.4. Helloworld Example
8.5. 数据类型
8.5.1. 数值型
8.5.1.1. 加 +,减 -,乘 *,除 / 运算演示
8.5.1.2. 求余 % 运算演示
8.5.1.3. 幂运算演示
8.5.1.4. 与 &,| 或,非 ~,异或 ^ 演示
8.5.1.5. 位移演示
8.5.2. 字符串
8.5.2.1. 获取字符串长度
8.5.3. 布尔(Booleans)
8.5.4. 字节类型
8.5.5. 数组
8.5.5.1. length
8.5.5.2. push() 方法
8.5.6. 枚举类型
8.5.7. 结构体
8.5.7.1. 函数返回Struct
8.5.8. address
8.5.8.1. payable
8.5.8.2. .value()
8.5.8.3. .gas()
8.5.9. mapping
8.6. 单位
8.6.1. 货币单位(Ether Units)
8.6.2. 时间单位(Time Units)
8.7. 变量
8.7.1. 全局变量
8.7.2. storage
8.7.3. memory
8.8. 函数
8.8.1. 构造方法
8.8.2. 定义函数
8.8.3. 函数返回值
8.8.4. 参数传递
8.8.5. 函数的例子
8.8.6. Fallback function
8.8.7. modifier
8.9. 事件
8.10. 面向对象编程
8.10.1. 可见性修饰符
8.10.2. 错误处理
8.10.3. interface 接口
8.10.4. library 库
8.10.4.1. 使用库来扩展数据类型
8.10.5. 继承
8.11. 合约调用
8.12. 合约接收 ETH
8.12.1. 调用 selfdestruct(msg.sender); 取出合约中的 ETH
8.12.2. 自动退款合约
8.12.3. 收款合约自动转账
8.12.4. 指定账号提取 ETH
8.13. 合约中实例化一个接口
8.14. 合约中实例化另一个合约
8.14.1. msg.sender 与 this 的区别
8.14.2. 地址格式
8.15. Solidity 安全问题
8.15.1. 整型溢出
8.16. solidity example
8.16.1. Voting
8.16.2. MetaCoin
8.16.3. Anonymous voting on Ethereum without a tally authority. Protocol from this paper
8.16.4. Ballot
8.16.5. Conference
8.17. Zeppelin Solidity - OpenZeppelin is a library for writing secure Smart Contracts on Ethereum.
8.17.1. 安装
8.17.2. ERC20
8.17.3. ERC872

Solidity 是什么?Solidity是以太坊智能合约的编程语言。

8.1. Remix

在线使用 Remix https://remix.ethereum.org/

国内网络有时不给力,建议将 Remix 安装到本地目录。

8.1.1. NodeJS

			
cd /usr/local/src
wget https://nodejs.org/dist/v18.4.0/node-v18.4.0-linux-x64.tar.xz
tar xf node-v18.4.0-linux-x64.tar.xz
mv node-v18.4.0-linux-x64 /srv/node-v18.4.0
rm -f /srv/node
ln -s /srv/node-v18.4.0 /srv/node

alternatives --install /usr/local/bin/node node /srv/node/bin/node 100 \
--slave /usr/local/bin/npm npm /srv/node/bin/npm \
--slave /usr/local/bin/npx npx /srv/node/bin/npx \
--slave /usr/local/bin/corepack corepack /srv/node/bin/corepack

node -v
			
			

8.1.2. Remix Project

Docker 安装 Remix

			
cd /usr/local/src
wget https://nodejs.org/dist/v18.4.0/node-v18.4.0-linux-x64.tar.xz
tar xf node-v18.4.0-linux-x64.tar.xz
mv node-v18.4.0-linux-x64 /srv/node-v18.4.0
rm -f /srv/node
ln -s /srv/node-v18.4.0 /srv/node

alternatives --install /usr/local/bin/node node /srv/node/bin/node 100 \
--slave /usr/local/bin/npm npm /srv/node/bin/npm \
--slave /usr/local/bin/npx npx /srv/node/bin/npx \
--slave /usr/local/bin/corepack corepack /srv/node/bin/corepack

node -v
			
			
			
npm install -g @remix-project/remixd			
			
			

			
[root@netkiller ~]# curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo
[root@netkiller ~]# dnf install -y yarn
[root@netkiller ~]# yarn global bin
[root@netkiller ~]# yarn global add @remix-project/remixd
[root@netkiller ~]# remixd -v
0.6.2
			
			

			
[root@netkiller ~]# su - docker
Last login: Fri Jul  1 13:27:58 CST 2022 on pts/0
[docker@netkiller ~]$ ls
remix
[docker@netkiller ~]$ cd remix/
[docker@netkiller remix]$ ls
docker-compose.yaml
[docker@netkiller remix]$ cat docker-compose.yaml 
version: "3.9"

networks:
  ethereum:

services:
  remixide:
    restart: always
    image: remixproject/remix-ide:latest
    container_name: remixide
    ports: 
      - 8080:80
      - 65520:65520
    networks:
      - ethereum			
			
			

8.1.3. Remix 桌面版

8.1.4. 输入数组

			
	function mint(address[] _to, uint256 _value) public returns (bool success) {
        for (uint i=0; i<_to.length; i++) {
            balanceOf[_to[i]] = _value;
        }
        return true;
    }
			
			

在Remix中输入数组的方法

			
["0x6F56648fbD2306f843442f8dC61d5C8861Fac7C9","0x81b7E08F65Bdf5648606c89998A9CC8164397647"]