Engineering Notes

孟斌的小站

技术博客与学习记录

共 610 篇文章 标签与分类索引已启用

Solidity:chainlink

简介

Chainlink是一个去中心化的Oracle网络,它允许智能合约在链上与链下的数据进行安全和可靠的交互。Chainlink的目标是成为区块链和现实世界之间的桥梁,使得智能合约能够访问现实世界的数据,支付系统,API等,从而扩大其应用范围。

继续阅读

Solidity:多签钱包

什么是多签钱包

多签钱包,也称为多重签名钱包,是一种加密钱包,它需要多个私钥才能签署并发送交易。这种钱包的主要优点是提供了额外的安全层,因为即使一个私钥被盗,也无法进行交易,除非有其他私钥的授权。

继续阅读

Solidity:存钱罐合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract CoinBank {
    // 声明一个变量来存储合约的所有者
    address immutable owner;

    // 在合约创建时,设置合约的所有者为创建者
    constructor() {
        owner = msg.sender;
    }

    // 装饰器函数,用于判断调用者是否是合约所有者
    modifier OnlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    // 创建一个名为deposit的函数,允许任何人向合约发送以太币
    function deposit() public payable {
        // 函数体为空,因为我们不需要做任何事情
        // 任何发送到这个函数的以太币都会自动添加到合约的余额中
    }

    // 创建一个名为withdraw的函数,只允许合约的所有者提取以太币
    function withdraw() external OnlyOwner {
        // require(msg.sender == owner, "caller is not owner");

        // 使用transfer函数将合约的所有余额发送给所有者
        (bool sent, bytes memory data) = address(msg.sender).call{
            value: address(this).balance
        }("");
        require(sent, "Failed to send Ether");
    }

    // 获取当前地址的余额
    function getBalance() external view returns (uint256) {
        return address(this).balance;
    }
}

上面的合约可以说是一个存钱罐合约,它允许任何人存入以太币,但只有合约的所有者才能取出:

继续阅读

Solidity:assembly和unchecked

unchecked

在 Solidity 0.8.0 及以上版本中,引入了一个新的关键字 unchecked。在 unchecked 块中,算术运算将不会进行溢出检查,这意味着如果结果超过了类型的最大值,它将回滚到类型的最小值,反之亦然。

继续阅读

Solidity:库函数

简介

在Solidity中,库(Libraries)是一种特殊类型的合约,它们包含了一些可重用的函数,可以在其他合约中调用。库函数可以帮助我们减少代码冗余,提高代码的可读性和可维护性。

继续阅读

Solidity:在合约中创建其它合约

在Solidity中,new关键字用于创建一个新的智能合约实例。当你使用new关键字创建一个新的合约实例时,Solidity会在区块链上部署一个新的合约,并返回新合约的地址。自0.8.0版本开始,new关键字通过指定salt选项支持create2特性。

继续阅读