简介
Chainlink是一个去中心化的Oracle网络,它允许智能合约在链上与链下的数据进行安全和可靠的交互。Chainlink的目标是成为区块链和现实世界之间的桥梁,使得智能合约能够访问现实世界的数据,支付系统,API等,从而扩大其应用范围。
技术博客与学习记录
Chainlink是一个去中心化的Oracle网络,它允许智能合约在链上与链下的数据进行安全和可靠的交互。Chainlink的目标是成为区块链和现实世界之间的桥梁,使得智能合约能够访问现实世界的数据,支付系统,API等,从而扩大其应用范围。
多签钱包,也称为多重签名钱包,是一种加密钱包,它需要多个私钥才能签署并发送交易。这种钱包的主要优点是提供了额外的安全层,因为即使一个私钥被盗,也无法进行交易,除非有其他私钥的授权。
// 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 0.8.0 及以上版本中,引入了一个新的关键字 unchecked。在 unchecked 块中,算术运算将不会进行溢出检查,这意味着如果结果超过了类型的最大值,它将回滚到类型的最小值,反之亦然。
在Solidity中,库(Libraries)是一种特殊类型的合约,它们包含了一些可重用的函数,可以在其他合约中调用。库函数可以帮助我们减少代码冗余,提高代码的可读性和可维护性。
在Solidity中,优化gas使用是非常重要的,因为每一笔交易都需要消耗gas。以下是一些可以帮助你优化gas使用的技巧:
在Solidity中,new关键字用于创建一个新的智能合约实例。当你使用new关键字创建一个新的合约实例时,Solidity会在区块链上部署一个新的合约,并返回新合约的地址。自0.8.0版本开始,new关键字通过指定salt选项支持create2特性。
在Solidity中,重入攻击是一种常见的安全问题。它发生在一个合约调用另一个合约的函数,然后被调用的合约再次调用原合约的函数,从而在原合约的函数完成之前改变其状态。以下是一些防止重入攻击的方法:
在Solidity中,合约之间的交互是通过调用进行的。以下是一些主要的合约调用方式:
在Solidity中,call和delegatecall是两种用于在合约之间进行交互的低级函数。它们都可以调用合约的函数,但是它们的工作方式和用途有所不同。