Skip to content

EthanOK/LearnSolidity

Repository files navigation

LearnSolidity

Solidity 英文文档 中文文档

Solidity by Example

Hardhat 安装与使用

Solidity 多重继承

Solidity 汇编

Solidity 汇编案例

Solidity delete

Solidity 智能合约基础开发 视频 文档

Solidity 引用拷贝与值拷贝

encode 与 decode

解析原始 Calldata 数据

encode 与 encodePacked 对比

UsingFor 与 用户定义值类型

Assembly log Event

计算 slot Get value

Gas Optimization

如何使用 encode 编码与 decode 解码结构体

以太坊签名 Java 版 头部加Ethereum Signed Message

Java encode 结构体(动态、静态) 动态数组; decode(data)

使用 Java 访问智能合约

Java 实现一次请求获取多个 Topics0 合约事件

使用 Java 获取地址的 ENS

使用 ethers.js 进行 abi.encode、encodePacked 和 signature

使用 EIP721 协议结构化数据

Verify Opensea Bulk Order Signature

Remix 使用viaIR: true 编译 配置文件

Remix 导入指定版本的合约库

白名单 空投

Create

使用ethers.js 预获取 create 创建的合约地址

Get Contract Address Of Create

  1. 预先计算出智能合约的地址(solidity code)
// Get bytecode of contract to be deployed

function getBytecode()
        public
        view
        returns (bytes memory)
    {
        bytes memory bytecode = type(SimpleWallet).creationCode;
        // creationCode + parameter(constructor)
        return abi.encodePacked(bytecode, abi.encode(msg.sender));
    }

function getAddress(uint256 _salt)
        public
        view
        returns (address)
    {
        // Get a hash concatenating args passed to encodePacked
        bytes32 hash = keccak256(
            abi.encodePacked(
                bytes1(0xff), // 0
                address(this), // address of factory contract
                _salt, // a random salt
                keccak256(getBytecode()) // the wallet contract bytecode
            )
        );
        // Cast last 20 bytes of hash to address
        return address(uint160(uint256(hash)));
    }
  1. 使用ethers.js 获取 create2 创建的合约地址

    Get Contract Address Of Create2

Solidity Contract Libraries

Vanity Address Generator

About

Solidity Utils

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published