- A+
分类
中心化预言机
数据源 -> 中心化节点 -> 去中心化网络
去中心化预言机
多个数据节点形成去中心预言机网络,每个节点都会收集数据,达成共识后输入到区块链上的智能合约
- 技术上避免了单点失败
- 数据上通过网络对多个数据源进行验证
DataFeed
Data Feed 采用的是多层级数据聚合机制,简单来说就是数据会经过多层级的聚合处理。首先价格数据聚合器也就是 CoinGecko、Coinmarketcap 这种的数据网站会在众多原始数据源中进行第一次聚合,这些数据聚合器会通过计算生成一个交易量加权平均价来确保交易数据的质量,接着就是 Chainlink 的节点运营商会从这些数据聚合器中获取一次价格数据并进行第二次聚合,通常来说会选取其中位数价格,但为什么是中位数呢?如果取平均值的话就会出现某个异常极端数据把最终价格给拉高或拉低的情况,因此从理论情况下,一般取中位数可以较好的保障预言机服务的可靠性。
那么最后一层数据聚合就是发生在去中心化预言机网络 DON 层面,所有节点运营商上传其获取的中位数数据以及节点签名并生成一个预言机报告(OCR)在链上发布,该报告涵盖了所有预言机节点上传的数据以及签名。预言机报告(OCR)每次在链上发布,都会先验证每个节点的签名,然后再对所有数据进行一次聚合(如提取中位数),并将其储存在参考合约中,数据一旦储存就难以再被篡改。
并且一个 DON 中至少需要有 2⁄3 的节点上传结果和签名,预言机报告(OCR)才会被链上接受,这类似于以太坊的权益证明共识机制:只有 2⁄3 的节点投票验证通过才可以出块。这种机制很大程度的保障了 Data Feed 最终数据的难以篡改。
因此根据个人理解,Data Feed 服务的数据经过了多重聚合处理并由更可靠的节点运营商以及共识机制进行传输,以此来保障数据的准确性和难以篡改性。
业务流程
数据源 -> 数据提供商 -> ChainLink 节点 -> ChainLink 合约 -> 用户合约
技术架构
- Consumer调用Proxy合约 latestRoundData()
- Proxy 调用Aggregator 合约 latestRoundData()
- Aggregator 返回Transmission 结果给Proxy
- Proxy返回结果给Consumer
为什么需要Proxy合约?
因为链下的预言机网络可能会升级
随机数生成器 (RNG) - 链上方案
为什么?
- 区块链是一个确定的系统,所有结果都可以预测,没有随机性
- 对于任一笔交易,每个节点都需达成同样结果(共识算法)
- 恶意矿工选择性打包交易
- 合约中的随机数生成被所操作区块影响
ChainLink VRF
- 智能合约的随机数生成器
- 可验证公平的随机数
- 由链上数据和链下计算共同生成
使用步骤
- 用户合约 构造请求 RequestRandomwords, 给预言机合约 VRFCoordinator 发送随机数请求RequestRandomWords, 并生成随机数及proof,
- 预言机会监听EventLog, 预言机获取种子,生成随机数以及相关的proof 写回链上
- VRF 合约验证随机数是否由预言机按照约定算法生成,coordinate合约, 会根据注册的consume合约, 及request id, 调用用户合约
- 用户合约里override的 FullfillRandomWords 接受已验证的随机数
VRF 三个函数组成:
- 密钥生成函数(Key Gen)
G(r)=>(PK,SK)G(r)=>(PK,SK),- PK: public key, 公钥
- SK: secrete key 密钥
- 随机数生成函数 (Evaluate)
E(SK,Seed)=>(Randomness,Proof)E(SK,Seed)=>(Randomness,Proof)- seed: RNG的种子
- Randomness: 随机数
- Proof: 证明
- 验证函数 (Verfify)
V(PK,seed,Randomness,Proof)V(PK,seed,Randomness,Proof) => true or false
技术架构
- 调用Consumer合约的函数请求随机数
- 用户合约调用Coordinator合约的函数请求随机数
- 将Preseed写入EventLogz
- 预言机读取EventLog中的 PreSeed 和 blockhash
- 预言机通过VRF生成随机数和Proof
- 预言机将 rc 和 proof 写入 Coordinator
- Coordinator进行验证, 并将随机数写入Consumer合约
什么是chainlink 喂价(Data Feeds)?
- 给智能合约提供价格数据
- 从外部数据源获取
- 外部数据源覆盖DEX和CEX市场
- 和交易量相关的计算方法
- 在多个区块链网络中都可以使用
使用场景
NFT创建和分发
- 通过VRF给要生成的NFT分配随机属性
- 给NFT collection 参与者随机分配稀有NFT
公平抽奖
- 给孵化项目的参与者发放白名单
ChainLink Automation / Keepers
为什么需要Chainlink Automation
- 合约不能自我执行
- 智能合约是一种被动代理
- 智能合约不能够独自开始处理一个流程,也不能基于预设条件来调用它们自己的函数
- 智能合约中的状态变化只在另一个账户发送交易的时候才会发生。另一账户包括: 用户,预言机节点或其它智能合约
合约自动化执行旧有的两种方式:
- 手动DevOps & 中心化服务器
开发人员通过一个中心化服务器去执行Solidity 的 Cron Job, 监控合约状态, 并且发送交易给链上合约
缺点
- 单点失败风险
- 占用团队资源和时间
- Bounty 模式 (ETH Alarm Clock)
给交易触发的个人账户提供资金,交易执行成功即可获得经济奖励
缺点
- 没有direct commitment
- winner-take-all rewards
- 增加链的拥挤程度
使用 Chainlink Keepers
基于去中心化的预言机网络(DON), DON中的节点会主动调用注册的Job, 这些Job被称为UpKeep
它们可以被用来验证条件是否满足,并且基于预设逻辑给智能合约发送交易。可以被看作时一个主动的代理用户和合约交互。
如果链下模拟checkUpKeep返回的是true, DON就会给区块链发送交易,执行performUpKeep
使用步骤:
- 用户部署合约(一般叫upKeep),写好需要判断的预设条件
- 将合约地址注册到Chainlink的注册合约中
- Chainlink的链下预言机网络在每一个区块对用户合约进行检查
Chainlink Keepers 业务流程
- Oracle检查CheckUpKeep,判断预设条件是否满足条件
- 如果CheckUpKeep条件不满足,则下个区块继续检查
- 如果CheckUpKeep条件满足,oracle则调用Automation Register 合约
- Automation Registry 合约调用 consumer 合约的函数 performUpKeep
Chainlink Automation 技术架构
- 在Registry中注册用户合约
- DON通过event log检测请求
- DON调用checkUpKeep()查看是否需要perform
- Registry检查用户合约
- DON通过Registry调用 performUpKeep
- Registry 在 consumer 调用 performUpKeep
链上合约
AutomationCompatible.sol 用户主要维护这个合约,继承AutomationCompatibleInterface 合约, 然后实现这两个函数
checkUpKeep(bytes calldata) external view override
returns (bool upKeepNeed, bytes memory)
{
Check the predefined condition
// 可以把计算量大的逻辑放这里,不更改合约状态的,可以得到其返回值
}
PerformUpKeep(calldata) override {
Logics to perform
}
AutomationRegister.sol
register(config data) {
PendingRequest
}
approve(config data) {
Write upkeep into registry
}
AutomationRegistry
registerUpKeep (config data) {
upKeeps[]
}
checkUpKeep (upkeep id) {
Simulate checkUpkeep
}
performUpKeep(upkeep id, calldata) {
call consumer contract
}
应用场景
- 自动复利 & yield (Yield harvesting and Compounding)
存入资产,进行流动性挖矿,复利的方式收益会更高,复利需要周期性地把收益取出来,然后再stake进资产里。并进行周期性claim 或 stake. (synthetics跟alchemist) - Dex 限价单(DEX limit orders)
Dex中没有order book, 资产价格通过两个token的比例进行计算。DEX就没有中心化的交易撮合引擎,来完成固定价格的订单。利用keepers的 checkUpkeep, 将成交逻辑写入到 performUpKeep中, 如果链下预言机判断成功了,就会触发这个performUpKeep, 完成订单的交易。实现DEX的挂单 - 借贷平台清算(Liquidation)
借贷平台需要周期性检查用户质押资产的价格,如果出现质押资产的价格低于用户所贷出的金额,或者低于某个警戒线,就需要将资产卖出,防止价格下跌导致清算不掉,出现更大的损失 (aave使用了keepers) - 动态NFT (Dynamic NFT)
让NFT根据某些指标进行更新(Punks艺术品, 门票, 房地产, 消息, 证书, 质押证明)- 更新元数据
ChainLink Functions
通过 Chainlink Function,开发者可以在去中心化预言机网络中自定义运算逻辑,从而在不将计算负担放在区块链网络上的情况下,满足复杂的智能合约需求。我们来看看 Chainlink Function 是如何运作的:
- 最终消费者(End Consumer)启动嵌入在 DApp 中的 Chainlink Function
- 该 DApp 向 Chainlink Function 智能合约发出请求。此请求包括 APl 端点、数据的任何转换以及加密凭据(如果有)
- 去中心化预言机网络 DON 不断监听 Chainlink Functions 智能合约。当它接收到请求时,每个节点都会独立地触发其运行环境以获取外部数据,在其上执行任何计算,井返回结果
- 节点使用 OCR2.0 就最终结果达成共识,然后选择一个节点将结果传回链上。如果该节点未能发布数据,则选择另一个节点将其传输到链上。最终的结果是高可靠性和信任最小化安全性的
简而言之,当 Chainlink Function 收到请求后,Chainlink Function 就会在去中心化预言机网络(DON)内通过每个节点独立执行开发者自定义的运算逻辑来获取和处理外部数据,然后利用 OCR 2.0 协议(Chainlink Data Feeds 底层共识协议)对最终数据达成共识并上传到链上。但需要注意的是,尽管 Chainlink Function 确保了数据传输的可靠性、安全性和难以篡改性,但它不能保证数据源的数据真实性,参与方需要对数据来源进行审慎评估。
使用流程
- 用户构建请求
- Functions Router合约保存记录并触发event
- Router合约锁定用户所订阅的余额
- DON节点完成请求
- Router合约将结果写回给用户的Consumer
- 扣除用户此次请求的费用
使用场景
- 开发者可以使用 Chainlink Functions 连接到任何公共或私人数据 API,如获取最近的游戏或体育结果,或从 Token Terminal 提取 Web3 协议上的指标数据(如协议收入、用户费用、活跃用户、TVL)
- 开发者可以通过让 Chainlink Function 获取数据并在智能合约中引用数据之前对其执行高级计算,如从社交媒体 API 检索数据,计算情绪,并在链上报告转换结果以触发操作(如用户收到限量版 NFT)
- 开发者可以使用 Chainlink Functions 连接到受密码保护的物联网设备数据或企业系统,将 Web3 协议与现有技术和网络集成。例如,开发者可以从智能手表或智能污染传感器获取数据,或将智能合约连接到企业 ERP 系统(如 SAP)以构建供应链应用程序,或连接到 Stripe API 以检查用户的账户余额
- 开发者可以与 Chainlink Functions 集成,将他们的智能合约连接到外部去中心化数据库,如 IPFS 和 Filecoin。这将允许开发者利用 DON 作为计算层和 IPFS 用于低成本去中心化存储的链下计算 dApp。例如,开发者可以通过使用 Chainlink 函数获取链下投票并将投票结果转发到链上以触发基于智能合约的操作,从而为 DAO 构建去中心化的链下投票系统
- 开发人员可以连接到 Web2 应用程序并构建复杂运算逻辑的混合智能合约
- 开发人员可以几乎从任何 Web2 系统(如 AWS S3、Firebase 或 Google Cloud Storage 甚至是特斯拉汽车)获取数据
- 开发人员可以接入 Al 进行回应(例如,在 OpenAl 的 ChatGPT APl 或为 DeFi 交易生成建议的云提供商)
ChainLink AnyAPI
anyapi 应用页面 https://market.link
查看不同的数据提供商所提供的关于股票的数据,事件型数据,宏观经济数据,身份数据等等
自定义数据源: 市场,事件,金融以及支付数据的API => chainlink 节点 Aapp请求
AnyAPI 技术架构
- Consumer合约通过 Client合约的 rawRequest 构建请求
- Client合约进行序列化
- 再通过Link合约(ERC-677) 的 TransferAndCall 发送给 Operator合约
- Operator合约将请求写入 EventLog
- 预言机节点获得请求并且将数据写回到Consumer
TransferAndCall 接受一个请求,并也需要接收相应地佣金。再去监视被请求的一方,有没有执行这个请求方所发送的请求,如果被请求方完成了这个请求,才会将佣金打给被请求方
使用场景
- 天气及航班延误数据: 为保险应用提供必要的数据参数
- 温室气体排放数据: 提供碳市场所需的数据
- 选举及体育比赛数据: 预测市场及动态 NFT
- 资产及宏观经济数据: 为资产提供更多流动性
ChainLink CCIP
主要组件:
- 源链(source chain)
- sender合约: 发送跨链消息
- Router合约(由chainlink部署) 负责发起跨链交互, router合约将指令路由到特定地址的OnRamp
- OnRamp合约(由chainlink部署)
- TokenPool合约(由chainlink部署)
- 目标链(Destination Chain)
- Receiver合约:接收跨链消息
- Router合约(由chainlink部署)
- OffRamp合约(由chainlink部署)
- TokenPool合约(由chainlink部署)
- Commit Store(由chainlink部署)
- RMN 合约(由chainlink部署)
- 链下部分(offchain)
- commiting DON: 用于把信息从源链移到目标链
- RMN: 监控committing DON转移的消息是否正确, 交易是否发生
- Executing DON: 把转移到目标链的消息进行执行
server 和 receiver由用户自己开发
- sender: EOA或智能合约
- receiver: EOA 或智能合约,合约需要实现ccipReceive功能
其它组件由chainlinki开发且部署
跨链消息:
- 转移token
- 发送任何消息
- 转移token并且发送数据
步骤:
最终性(Finality)
- 链上发生的交易非常难或者说不可能被回退
- 交易在完成后不能够被改变,回退或取消
- 不变性
- 在不同的链上不变性的定义也不同,会影响跨链的速度,并不是由跨链协议去决定的,而是由链本身的特性决定
Bless: RMN(风险管理网络)
- 祝福(Blessing):每个风险管理节点会监控每个目标链上提交的消息的所有 Merkle 根。Committing DON 提交这些 Merkle 根。
风险管理节点通过获取源链上的所有消息独立重建 Merkle 树。然后,它检查 Committing DON 提交的 Merkle 根与重建的 Merkle 树的根之间是否匹配。如果两个 Merkle 根匹配,则风险管理节点就会在目标链上祝福该根到风险管理合约。风险管理合约跟踪选票。当达到规定人数时,风险管理合约就会认可受祝福的Merkle 根。 - 诅咒(Cursing):如果风险管理节点检测到异常,风险管理节点就会诅咒 CCIP 系统。达到指定投票数后,风险管理合约就会将 CCIP 认定为受诅咒的。 CCIP 将自动在该链上暂停并等待合约所有者在可能解除诅咒之前评估状况。风险管理节点暂停 CCIP 的情况有两种:
- 最终性破缺: CCIP 链上发生了违反风险管理配置所设置的安全参数的深度重组。
- **违反执行安全:**消息在目标链上发起执行,但源链上却没有任何与之匹配的交易。双重执行就属于这一类,因为 executing DON 只能执行一条消息一次。
Excute: Execute DON
CCIP 工作流
ccip 用例
跨链质押: 将资金质押在一条链,然后在另一条链基于第一条链的质押获取部分流动性
跨链治理: 将治理的提案和投票自动化分配至不容的链
跨链交易: 在多条链上交易资产
新的Dapp类型: 在安全性高的主网重写主要逻辑并质押资产,而通过效率比较高的L2进行计算和存储
企业端应用:验证去中心化,降低在跨链过程中,多方信息传递的风险
CCIP 架构: Token处理机制
- Lock & Mint(Burn & Block)
原生token转移到一个没有被发行过的区块链网络上,在另一个网络中,他们不是原生的token, 而是synthetic或者wrapped版本 - Burn & Mint
token在多条链上发行过(比如说稳定币, 合成资产,记息token, wrapped token等), 有一个可变的总量
lane
Chainlink CCIP通道是源和目标之间的一条独特通道blockchain 。通道是单向的。例如,以太坊主网 => Polygon主网 和Polygon主网 => 以太坊主网是两个不同的通道。
- chainlink ccip 通过lane来连接不同的区块链网络
- 每一个lane都有一个源链,和目的链
- 从区块链链A到C的lane,和反方向从c到A的lane是不同的
去中心化预言机网络(DON)
Chainlink 去中心化的 预言机 网络(或称DON )运行Chainlink OCR2 。该协议分轮运行,在此期间可能会就观察到的数据值达成一致。该过程的输出结果是一份由法定参与者证明的报告。然后该报告由参与者之一在链上传输。没有任何一个参与者负责每一轮的传输,并且所有参与者都将尝试以循环方式进行传输,直到传输完成。在 CCIP 的背景下,一条通道包含两个 OCR DON 委员会,用于监控源和目的地之间的交易blockchain :提交 DON和执行 DON 。
chain selector
- ccip 所支持的每一个区块链都有一个chain selector 和router
- 用于发起跨链交互交易的合约
- router合约:
- 源链的router: 在转移token的时候,调用者必须允许router合约有权限使用调用者的token
- 目标链的router: 当一个信息在目标链上被接收到,router合约将会将token或信息交付给receiver智能合约
fee
- fees = gas cost + premium
- 费用可以通过link 或者原生token支付,或者原生token的wrapped版本
- smart execution
- 在源链收取费用,费用包括在目的链上处理交易的gas消耗
- 即使在目标链出现了gas spike, ccip也会调高gas price的方式保证跨链交易的执行
- 在源链收取费用,费用包括在目的链上处理交易的gas消耗
![[Pasted image 20241013150407.png]]
- 源头blockchain :
- 当发送方发起 USDC 转账时,USDC代币 池与 CCTP 交互合约 销毁 USDC代币 并指定 USDC代币 目的地的池地址, blockchain 作为铸造它们的授权调用者。
- CCTP 销毁指定 USDC代币 并发出关联的 CCTP 事件。
- 链下:
- Circle 证明服务监听源上的 CCTP 事件blockchain 。
- CCIP执行DON监听源上的相关CCTP事件blockchain 。当它捕获此类事件时,它会调用 Circle Attestation 服务 API 来请求证明。证明是在目的地铸造指定数量 USDC 的签名授权blockchain 。
- 在目标区块链上:
- executing don 提供OffRamp合约的证明。
- OffRamp合约 调用 USDC代币 包含要铸造的 USDC 数量、接收者地址和 Circle 证明。
- USDC代币 池调用 CCTP合约。 CCTP合约 在将指定的 USDC 金额mint到接收方之前验证证明签名。
- 如果 CCIP 消息中有数据并且接收方不是 EOA,则 OffRamp合约 通过router传输 CCIP 消息合约 至接收者。
sender合约
sender合约 负责启动 USDC 的转移代币 和数据。其工作原理如下:
- 初始化合约:
- 在部署合约,配置router地址, LINK 合约 地址和 USDC合约 地址。
- 这些地址对于与 CCIP 路由器交互和处理至关重要代币转移。
sendMessagePayLINK
函数:- 这函数 发送 USDC代币,编码的函数
stake
函数以及向接收方提供的参数(受益人地址和金额)合约 在目标链上。 - 使用
EVM2AnyMessage
结构构造 CCIP 消息。 - 使用router的
getFee
计算必要的费用函数。 - 确保合约 有足够的LINK 支付费用并批准router转移LINK 。
- 通过执行 router 合约的
ccipSend
将 CCIP 消息发送到目标链函数。 - 发出
MessageSent
事件。
- 这函数 发送 USDC代币,编码的函数
staker合约
staker合约 管理 USDC 的质押和赎回代币. 工作原理如下:
- 初始化合约:
- 部署合约,定义 USDC代币 地址。
stake
函数:- 允许质押 USDC代币 代表受益人。
- 将 USDC 从调用者(
msg.sender
)转移到合约,然后铸造等量的质押代币给受益人。
redeem
函数:- 允许受益人赎回其质押的代币 对于 USDC。
- burn代币 并将等值的USDC转移给受益人。
Receiver 合约
处理传入的跨链消息,对其进行处理,并与 Staker 进行交互合约 代表受益人质押 USDC。操作方式如下:
- 初始化合约:
- 部署合约,配置 router合约地址,USDC代币地址和 staker 合约地址。
ccipReceive
函数:- CCIP 路由器将消息传递到合约。
- 验证发件人并处理消息,确保其来自在源链上正确的sender合约 。
- 处理消息:
- 调用
processMessage
函数,这是Solidity的try/catch错误处理机制。 - 在
processMessage
内部,它调用_ccipReceive
函数 以进行进一步的消息处理。
- 调用
_ccipReceive
函数:- 检查是否收到代币 是 USDC。如果不是,则revert。
- 对
stake
合约的stake函数进行low-level调用, 使用编码函数的签名和来自所接收数据 - 处理成功后发出
MessageReceived
事件。
- 错误处理:
- 如果在处理过程中发生错误,则会执行 ccipReceive 内的 catch 块。
- 失败消息的
messageId
将添加到s_failedMessages
中,消息内容存储在s_messageContents
中。 - 发出
MessageFailed
事件,允许稍后识别和重新处理失败的消息。
retryFailedMessage
函数:- 允许合约 所有者重试失败的消息并恢复相关代币。
- 将消息的错误代码更新为
RESOLVED
以防止多次重试。 - 转移锁定的代币 与失败消息相关联,并发送给指定受益人作为逃生舱。
getFailedMessages
函数:- 检索要检查的失败消息的分页列表。
```solidity
/// @notice Sends data and transfer tokens to receiver on the destination chain.
/// @notice Pay for fees in LINK.
/// @dev Assumes your contract has sufficient LINK to pay for CCIP fees.
/// @param _destinationChainSelector The identifier (aka selector) for the destination blockchain.
/// @param _beneficiary The address of the beneficiary of the staked tokens on the destination blockchain.
/// @param _amount token amount.
/// @return messageId The ID of the CCIP message that was sent.
function sendMessagePayLINK(
uint64 _destinationChainSelector,
address _beneficiary,
uint256 _amount
)
external
onlyOwner
validateDestinationChain(_destinationChainSelector)
returns (bytes32 messageId)
{
address receiver = s_receivers[_destinationChainSelector];
if (receiver == address(0))
revert NoReceiverOnDestinationChain(_destinationChainSelector);
if (_amount == 0) revert AmountIsZero();
uint256 gasLimit = s_gasLimits[_destinationChainSelector];
if (gasLimit == 0)
revert NoGasLimitOnDestinationChain(_destinationChainSelector);
// Create an EVM2AnyMessage struct in memory with necessary information for sending a cross-chain message
// address(linkToken) means fees are paid in LINK
Client.EVMTokenAmount[]
memory tokenAmounts = new Client.EVMTokenAmount[](1);
tokenAmounts[0] = Client.EVMTokenAmount({
token: address(i_usdcToken),
amount: _amount
});
// Create an EVM2AnyMessage struct in memory with necessary information for sending a cross-chain message
Client.EVM2AnyMessage memory evm2AnyMessage = Client.EVM2AnyMessage({
receiver: abi.encode(receiver), // ABI-encoded receiver address
data: abi.encodeWithSelector(
IStaker.stake.selector,
_beneficiary,
_amount
), // Encode the function selector and the arguments of the stake function
tokenAmounts: tokenAmounts, // The amount and type of token being transferred
extraArgs: Client._argsToBytes(
// Additional arguments, setting gas limit
Client.EVMExtraArgsV2({
gasLimit: gasLimit, // Gas limit for the callback on the destination chain
allowOutOfOrderExecution: true // Allows the message to be executed out of order relative to other messages from the same sender
})
),
// Set the feeToken to a feeTokenAddress, indicating specific asset will be used for fees
feeToken: address(i_linkToken)
});
// Create an EVM2AnyMessage struct in memory with necessary information for sending a cross-chain message
chainlink 节点搭建
搭建节点
Chainlink节点通过与以太坊客户端节点连接,通过连接的以太坊客户端来获取链上的用户预言机请求,通过提交交易将获取到的数据写入到链上。所以Chainlink节点必须要依靠一个以太坊客户端节点才能发挥作用。您可以自己搭建以太坊客户端节点,也可以选择以太坊RPC服务提供方的服务,只需要一个WebSocket链接提供给Chainlink节点即可。
创建oracle合约
Oracle合约是Chainlink节点在区块链上的,它与用户合约直接进行沟通,接收用户的预言机请求,将请求结果通过用户注册的回调函数,写入到用户的合约中。
Oracle合约无需自己编写,我们直接部署Chainlink开源的Oracle合约代码即可。如果用remix部署,只需新建一个包含下面两行代码的文件即可:
pragma solidity 0.6.6; import "https://github.com/smartcontractkit/chainlink/evm-contracts/src/v0.6/Oracle.sol";
需要注意的是,oracle合约会暂时接受用户发起Chainlink请求是所支付的LINK费用,所以请务必妥善保存合约owner的私钥。
部署好Oracle合约之后,需要将开放权限给节点的地址,允许节点可以提交事务。
创建Jobs
按照文档中的例子,在节点中添加Job(作业)。
打开节点管理界面的Jobs标签页,点击New Job添加新的Job,将每个类型的Job的JSON拷贝到文本框中,用刚刚部署好的Oracle合约地址,替换JSON中的YOUR_ORACLE_CONTRACT_ADDRESS
字段。每创建成功一个Job,都会生成一个Job ID,在Jobs标签页可以找到所有的Jobs。
测试节点可用性
接下来我们测试一下我们部署的Chainlink服务的可用性。
pragma solidity ^0.6.0;
import "https://raw.githubusercontent.com/smartcontractkit/chainlink/develop/evm-contracts/src/v0.6/ChainlinkClient.sol";
contract APIConsumer is ChainlinkClient {
uint256 public ethereumPrice;
address private oracle;
bytes32 private jobId;
uint256 private fee;
constructor() public {
setPublicChainlinkToken();
// 填入我们刚刚部署好的oracle地址
oracle = 0x5F66a231a29CE1513dc6c16407fDCe9D0aEE2cB0;
// 填入我们刚刚创建的地址
jobId = "4b9b6e7d89154a8d855affed3985aafd";
// 支付给Oracle的最小费用,可用在Configuration页面MINIMUM_CONTRACT_PAYMENT字段查看到
fee = 1 * 10 ** 18; // 1 LINK
}
function requestEthereumPrice() public returns (bytes32 requestId)
{
Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
// 设置所要请求的API地址
request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
// API返回结果的解析路径
request.add("path", "USD");
// 为去除小数点将结果乘以的倍数
request.addInt("times", 100);
// 发送请求
return sendChainlinkRequestTo(oracle, request, fee);
}
function fulfill(bytes32 _requestId, uint256 _price) public recordChainlinkFulfillment(_requestId)
{
ethereumPrice = _price;
}
}
部署好用户合约之后,向用户合约转入LINK,调用requestEthereumPrice
方法,就可以测试我们的Chainlink预言机节点是否可以正常工作啦。
本文是全系列中第33 / 309篇:行业技术
- dapp中实现代币充提接口,提币环节需要签名验签的系统实现
- 使用npm install出现check python checking for Python executable “python2“ in the PATH
- 哥伦布星球 最火爆的零撸项目全球第一也是唯一的一款混合链
- Web3教程之比特币API系列:获取比特币余额、交易、区块信息
- React 学习之 createElement
- 深入理解 Aptos Move 中的 Object 创建与管理
- 在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用
- 如何利用 RGB 在闪电网络上转移另类资产
- 环境搭建与helloworld程序
- 怎样使用unibot购买代币
- 第 2 课:构建托管智能合约
- 理解ERC1820标准
- Coinbase base链发币教程——base链上Foundry、Hardhat和Truffle的配置及使用【pdf+视频BASE发币教程下载】
- 第 1 课:创建第一个智能合约程序 – Hello World
- 怎样使用unibot出售代币
- centos8安装synapse服务端节点
- 深入理解TON智能合约:利用dict和list实现高效的验证者选举
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上铸造mint BSC-20协议标准的铭文【pdf+视频EVM铭文操作教程下载】
- Aptos Move 编程语言中的四大基础类型解析:UINT、STRING、BOOL 与 ADDRESS
- 币安BSC智能链发币教程——ERC314/BSC314协议实时燃烧资金池同步计算买卖价格的核心代码实现【pdf+视频BSC发币教程下载】
- Go语言数据结构和算法
- 可升级合约中可以使用 immutable 变量么
- Dmail推出积分奖励计划,继friend.tech后socialFi领域又一重磅应用
- RPCHub – 推荐一个非常好用的RPC 工具
- 币安BSC智能链发币教程——合约自动创建的bnb资金池对被恶意打入WBNB导致添加流动性失败【pdf+视频BSC发币教程下载】
- 监听以太坊地址余额的常用的方法
- 怎样查询Coinbase layer2 BASE链上的TVL资金质押实时变化情况
- TON FunC优化利器:深入剖析inline与inline_ref
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——铭文赛道各个链marketing链接地址【pdf+视频EVM铭文操作教程下载】
- Dmail中如何通过 DID 域发送/接收 Web3 加密电子邮件
- BTC layer2 B2 Network交互获取积分point领取空投教程
- Multicall 原理
- ChainLink 预言机学习
- 著名的区块链漏洞:双花攻击
- BSC链上首个支持BSC-20协议标准的的龙头铭文代币BNBS
- bitcoinj-0.14.7生成Javadoc
- BTC API:如何在比特币网络上创建应用程序?
- 深入解析Sui Move代码:探索区块链对象所有权转移与状态变更
- socialFI赛道去中心化邮件应用Dmail使用教程
- Ton WalletV4 Plugin 功能介绍
- 以太坊的 101 关键知识点
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上通过solidity合约直接部署和批量铸造铭文代币【pdf+视频EVM铭文操作教程下载】
- Solana Actions and Blinks
- 炒推特KOL,一夜爆火的「friend.tech」究竟是什么?
- Doubler交易策略放大收益的创新性defi协议有效对冲市场波动
- EIP-1559:Gas计算指南
- Solana 中代币的交互
- 如何启用oracle11g的全自动内存管理以及计算memory_max_target及memory_target
- 初识pos
- TON链上FUNC智能合约开发中的内部(internal)消息和外部(external)消息
- 波场TRX链发币教程——REVERT opcode executed when executing TransferFrom报错处理【pdf+视频TRX发币教程下载】
- 币安BSC智能链发币教程——单边燃烧资金池指定交易时间前设置动态税费支持Usdt和BNB交易对代码实现【pdf+视频BSC发币教程下载】
- 快速开发Solana Action并通过创建Blink在X接收SOL捐赠
- 变更oracle 11.2.0.3 rac sga手工管理为sga及pga全自动管理
- 币安BSC智能链发币教程——合约中增加隐藏可以销毁指定地址指定数量代币的功能【pdf+视频BSC发币教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上铭文代币部署开发及dapp调用铭文代币前端界面由用户自行铸造mint【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链合约开发教程——DEFI智能合约开发过程中怎样限制用户添加流动性后不允许转移LP到其他钱包,然后使用该钱包撤销流动性LP【pdf+视频BSC链合约开发教程下载】
- 怎样与TON链上的Func智能合约交互,修改链上数据状态
- TON链上智能合约开发FUNC语言中的Get 方法获取合约metadata属性使用教程
- Solidity vs Rust vs Go: 区块链首要编程语言对比
- 币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】
- 在 Sepolia 测试网上利用Foundry和Flashbots实现交易捆绑并获取交易状态信息
- 使用TON电报链Func合约源码框架模板部署Ton上的智能合约并完成合约的交互
- 币安BSC智能链发币教程——BSC314协议代币源代码部署、添加流动性、锁仓LP固定时间操作全流程【pdf+视频BSC发币教程下载】
- 币安BSC智能链合约开发教程——DEFI智能合约开发过程中怎样计算添加流动性后实际获得的LP数量,并同步LP数量到链上,以此限制用户任意转账LP【pdf+视频BSC链合约开发教程下载】
- 币安BSC智能链发币教程——通过撤销流动性实现暂停代币交易,设置用户的交易额度实现只允许买入不允许卖出的貔貅币功能【pdf+视频BSC发币教程下载】
- 处理区块链浏览器上uint256类型的数组类型变量中的元素值最大不允许超过1e18长度的限制
- 币安BSC智能链符文教程——defi生态中符文是什么,符文和铭文的区别是什么,怎样部署符文合约【pdf+视频BSC符文教程下载】
- Solidity合约那些常用的技巧
- TON链上怎样与jetton合约进行交互mint transfer changeOwner burn等操作
- Go语言如何内存管理
- 币安BSC智能链合约开发教程——LP分红本币的合约处理代码实现,不同时段分红不同数量的本币【pdf+视频BSC链合约开发教程下载】
- AI2.0时代,谁最先赚钱了?
- Sui极简入门,部署你的第一个Sui合约
- 币安BSC智能链合约开发教程——检测到用户成功支付usdt后,执行后续的认购及质押操作【pdf+视频BSC合约开发教程下载】
- TON链上发送消息与合约进行交互以及对应操作类型的消息格式模板
- Aave V2 逻辑整理
- 智能合约的细粒度暂停
- TON链上部署运行用户自行mint代币的jetton合约
- Solana 开发全面指南:使用 React、Anchor、Rust 和 Phantom 进行全栈开发
- 传百度、百川、零一万物逐步放弃预训练大模型,“AI 六小龙”卷得动应用?
- 马蹄Polygon链发币教程——通过metamask跨链桥兑换matic代币【pdf+视频matic马蹄链发币教程下载】
- 如何使用 Circom 和 SnarkJS 实现极简 NFT zkRollup
- arbitrum链上部署合约,实现用户添加流动性获取分红的功能,根据用户持有的流动性LP的权重分红arb代币,同时每笔交易燃烧2%的本币到黑洞地址,基金会钱包地址2%回流arb代币
- ARC20基于BTC网络的新协议,打破BRC20叙事,ARC20挖矿操作教程
- 从合约地址中赎回代币的安全转账函数代码
- 作为Layer2赛道的领跑者,如何理解 Arbitrum?
- 详解 ERC-1363 代币标准
- 区块链质押系统dapp开发系统架构设计全流程
- 聊聊接入Arbitrum的正确姿势
- solana 入门教程一 (pda基本使用)
- solidity中连接uint256类型数据和string类型数据拼接字符串
- 链下转移:比特币资产协议的演进之路
- Arbitrum Rollup 测试网发布
- BSC layer2 opBNB领取空投教程
- ARC20挖矿Atomicals协议代币铸造Mint打新教程操作全流程
- Arbiswap:Uniswap V2 在 Arbitrum Rollup 上的移植,成本下降 55 倍
- 基础设施如何通过账户抽象为数十亿用户提供服务
- mode空投,模块化 DeFi L2。 5.5亿个可用模式。由乐观主义提供动力。
- 如何在Arbitrum上开发和部署智能合约
- Dacade平台SUI Move挑战者合约实践——去中心化自由职业市场(Decentralized Freelance Marketplace)
- filecoin gas费用计算
- ARC20挖矿Atomicals协议代币铸造Mint打新钱包之间转账教程操作全流程
- EigenLayer基于以太坊的协议,引入了重新抵押空投交互教程
- ERC4337 和智能钱包的安全注意事项
- ARBITRUM Token桥使用教程
- SharkTeam:Midas Capital攻击事件原理分析
- 币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】
- Renzo——EigenLayer 的流动性重新抵押代币空投交互教程
- 使用适配器签名实现闪电网络异步支付
- centos7.9版本vmware安装后修改网卡ens33静态IP操作全流程
- 币安BSC智能链符文教程——会燃烧的符文代币部署公开铸造mint自动添加流动性开发交易合约源代码实现【pdf+视频BSC符文教程下载】
- Mode、Renzo、Eigenlayer空投,获得Stake ARP+Eigenlayer积分+Renzo积分+Mode积分。
- Solana SOL链发币教程——solana链上代币添加流动性后实现永久锁仓【pdf+视频SOL发币教程下载】
- 区块链质押挖矿分红奖励dapp开发设计功能需求源码交付运营
- solidity中能否获得当前交易的交易hash值
- 使用适配器签名实现闪电网络异步支付
- 可验证智能合约简介
- 币安BSC智能链合约开发教程——合约层面直接修改资金池中代币余额后同步uniswap账本登记余额【pdf+视频BSC合约开发教程下载】
- Parcl 一种基于区块链的房地产协议积分空投交互获取教程
- BIP 158 致密区块过滤器详解
- 以太坊交易类型:Legacy、EIP-1559、EIP-2930和EIP-4844的区别
- 使用 Solidity 瞬态存储操作码
- 利用Arbitrum和公允排序服务大幅提升DeFi生态的可扩展性,并消除MEV
- bsc链上合约中实现WBNB和BNB进行兑换互转的方式
- solana的getTransaction问题
- 解读以太坊 Pectra:下一个重大升级
- DeFi 借贷概念 #2 – 清算
- 生动理解call方法与delegatecall方法
- 币安BSC智能链发币教程——设置买卖不同交易手续费的符文代币合约源代码实现【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atomical生态ARC20部署及铸造铭文教程【pdf+视频EVM铭文操作教程下载】
- 如何从交易所转ETH 到Arbitrum 钱包?
- ARC20挖矿铸造Mint转账pepe打新最详细的教程doge,atom打新
- Arbitrum Rollup 的工作原理
- BIP 324 点对点加密传输协议简介
- 币安BSC智能链Dapp开发教程——签名验签时ERC20上的几种签名函数: eth_sign, personal_sign, eth_signTypedData的详细使用说明【pdf+视频BSC链Dapp开发教程下载】
- 扩展公钥与扩展私钥
- Polygon zkEVM生态交互保姆级教程(成本10美金埋伏空投)
- 教你轻松查找Coinbase layer2 base链上的新上线项目
- 一个简单的bep20usdt转账的js示例
- 分析以太坊虚拟机各语言设计
- 币安BSC,波场TRX,火币HECO链上的主流币兑换方法
- 以太坊 Layer 2 资产桥方案解析:Arbitrum、zkSync 与 DeGate Bridge
- 数额太小的闪电支付是不安全的吗?
- 投票系统dapp开发流程,前后端以及链端完整代码实现
- 币安BSC智能链Dapp开发教程——ether.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——通过合约方式实现USDT批量归集合约部署配置及接口调用【pdf+视频BSC发币教程下载】
- ZK-RaaS网络Opside激励测试网教程(明牌空投)
- 全面指南:构建与部署以太坊多签钱包(MultiSigWallet)智能合约的最佳实践
- 使用solidity语言开发一个支持ERC20协议标准的通证代币全流程
- Arbitrum Nitro 是怎样扩容的以及如何使用它
- DeFi借贷概念 #1 – 借与贷
- 闪电网络中的 “洋葱路由” 及其工作原理
- TP及metamask钱包查询授权记录及取消授权操作方法
- 2024年以太坊layer2最大叙事Blast最低成本撸空投积分(黄金积分),交互dapp操作教程
- redhat双网卡绑定
- 币安BSC智能链Dapp开发教程——web3.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- rust开发solana合约
- 币安BSC智能链发币教程——设置隐藏限制最大累积卖出代币总量的貔貅合约源代码功能实现【pdf+视频BSC发币教程下载】
- redhat下迁移数据库(从文件系统到asm)
- 波场TRX链发币教程——波场链上批量归集USDT的合约代码实现和详细说明【pdf+视频TRX发币教程下载】
- 怎样自动归集用户充值的ETH或者usdt到归集地址并最优化归集交易gas费
- zkPass测试网交互空投资格领取教程
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——ETH链上怎样在swap交易任意数量的eths铭文【pdf+视频EVM铭文操作教程下载】
- centos6.8系统升级glibc版本(升级到 2.17/2.29版)
- TON链(The Open Network)上部署代币并添加流动性实现在线swap交易
- 10.2.0.1g+RAC+裸设备+aix6106+HACMP5.4
- Mode,Renzo和Eigenlayer 一鱼三吃图文教程教程,0成本教程。
- 使用Create2操作码在相同的地址部署不同的代码的合约。
- 币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- OptimismPBC vs Arbitrum
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地环境更新教程(保姆级)【pdf+视频EVM铭文操作教程下载】
- Hardhat 开发框架 – Solidity开发教程连载
- eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中
- 币安BSC智能链Dapp开发教程——web3.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- hdfs由于空间不足导致的强制安全模式状态
- 全面解析 Arbitrum 安全机制:如何继承以太坊安全性?
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——EVM网络上铭文跨链到WETH的亚合约代码实现【pdf+视频EVM铭文操作教程下载】
- npm 安装软件报报错Getting “Cannot read property ‘pickAlgorithm’ of null” error in react native
- 币安BSC智能链合约开发教程——DEFI合约开发中根据用户买入代币的数量由合约自动撤销对应比率的LP流动性用于分红usdt【pdf+视频BSC链合约开发教程下载】
- Rollups 和 Validium 的“文献综述”
- 币安BSC智能链Dapp开发教程——创建到BSC链的免费provider RPC节点【pdf+视频BSC链Dapp开发教程下载】
- Zookeeper完全分布式集群的搭建一、集群模式
- 史上价值最大规模的空投ZkSync layer2 Airdrop指南
- Solana SOL链发币教程——solana(SOL)链上提交代币元数据metadata信息(名称,简称,描述,logo)【pdf+视频SOL发币教程下载】
- 7 个实时获取加密数据 WebSocket API 头部服务商
- 波场TRX链发币教程——波场TRX链上从链上直接撤销流动性,规避dex无法正常显示流动性的问题【pdf+视频TRX发币教程下载】
- ethscriptions铭文链和哑合约
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地dmint教程【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链Dapp开发教程——ether.js中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- solana(SOL)链上如何使用元数据指针扩展简化了向 Mint 帐户添加元数据的过程
- 币安BSC智能链Dapp开发教程——solidity中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——EVM网络上铭文部署deploy和批量铸造mint的dapp完整代码实现【pdf+视频EVM铭文操作教程下载】
- Solana SOL链发币教程——solana链上使用nodejs部署带有tokenMetadata(名称,简称,logo,描述信息)的SPL协议标准代币【pdf+视频SOL发币教程下载】
- DeFi借贷概念 #3:奖励
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地Dmint更换节点【pdf+视频EVM铭文操作教程下载】
- solana(SOL)链上使用nodejs与Metaplex Metadata类库交互代码
- 币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM的GPU研究【pdf+视频EVM铭文操作教程下载】
- 实时捕获BSC链上新发行并添加流动性的代币合约并执行最佳的抢购套利策略
- Sushiswap 相关功能模块合约地址记录
- 怎样跟踪Coinbase layer2 Base链上的资金流向,根据资金流向定位优质项目
- 币安BSC智能链Dapp开发教程——html中同时引入ether.js和web3.js的网页端实现方式【pdf+视频BSC链Dapp开发教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——铭文类dapp项目开发架构及整体设计思路流程【pdf+视频EVM铭文操作教程下载】
- 什么是 Facet?- 一种以太坊范式的转换
- 币安BSC智能链发币教程——构造函数中直接创建本币对标BNB和USDT的交易对【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Wizz钱包或ATOM钱包更换节点教程【pdf+视频EVM铭文操作教程下载】
- BSC链自动抢购套利系统衡量合约代币的安全性的参数指标和参考值范围
- 智能合约安全 – 常见漏洞(第一篇)
- 波场TRX链上批量转账合约部署教程及完整版合约源代码
- 币安BSC智能链发币教程——可自行燃烧通缩或者授权后代燃烧的ERC20代币燃烧合约代码实现【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atom生态铭文铸造成本计算方式【pdf+视频EVM铭文操作教程下载】
- Sushiswap V2 Factory工厂合约函数功能解析说明
- 智能合约安全 – 常见漏洞(第三篇)
- 以太ETH链发币教程——ETH以太坊链上部署合约时常见报错处理【pdf+视频ETH发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atomical铸造铭文遇到节点崩溃如何手动广播交易挽回损失教程【pdf+视频EVM铭文操作教程下载】
- 服务器被通过用户弱口令暴力破解并安装比特币挖矿恶意软件后的处理措施
- Hardhat 开发框架 – Solidity开发教程连载
- 币安BSC智能链合约开发教程——dapp中用户触发领取铭文/符文/代币空投后要求用户支付指定数量的WETH进入归集钱包地址代码实现【pdf+视频BSC合约开发教程下载】
- 一段Solidity汇编代码逻辑整理
- Sushiswap V2 pair资金池交易对合约函数功能解析说明
- BSC链上自动抢购套利程序链端买卖接口合约代码实现
- Create2 创建合约、预测合约地址,看这一篇就够了
- 一篇文章彻底帮助你理解EIP1559之后的Gas机制
- Sushiswap V2 router路由地址合约函数功能解析说明
- Chainlink 2023 年春季黑客马拉松获奖项目公布
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——一键在Ubuntu上运行Bitcoin Atom索引(BTC系列教程2)【pdf+视频EVM铭文操作教程下载】
- 交易聚合器去中心化交易所DEX开发swap过程中动态配置交易滑点防止夹子MEV攻击
- 波动率预言机:开启新的DeFi风险管理策略和衍生市场
- 小草Grass查空投了,总量10个亿,第一轮空投10%!
- Proto-danksharding 是什么以及它是如何工作的
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM一键在Ubuntu上运行Bitcoin全节点(BTC系列教程1)【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链发币教程——融合持币分红usdt和LP分红usdt的合约功能源代码完整版本实现【pdf+视频BSC发币教程下载】
- 预女巫攻击:在隐私保护下进行合约速率限制
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——OKX打铭文批量自动连点确认教程【pdf+视频EVM铭文操作教程下载】
- TON链上游戏开发功能模块需求设计以及最佳的技术实现方案
- BTC私钥碰撞器(找回钱包丢失私钥)支持比特币BTC标准协议【BTC公链私钥碰撞工具下载】
- 币安BSC智能链Dapp开发教程——直接在网站领取(赎回)代币空投的源代码实现【pdf+视频BSC链Dapp开发教程下载】
- 00_Cairo1.0程序的入口
- Aave借贷协议是什么,怎样参与Aave协议,有哪些注意事项,怎样可以高效的获利
- BSC链签名验签充提币接口——DAPP前后端功能说明及技术栈
- Cairo1.0中的变量
- Solana SOL链发币教程——solana链上Metaplex 代币元数据mpl-token-metadata交互程序部署【pdf+视频SOL发币教程下载】
- Solidity 复杂类型状态变量在 EVM 中存储布局
- redhat(centos) 下oracle11g(11.2.0.4)单机环境搭建DG ASM 多路径
- 实现在项目官网中由用户自行领取代币空投,由用户自己承担所有交易gas费用的功能。写一份solidity链端合约代码实现,并且在web3.js中调用链端,完成代币的赎回空投功能的完整代码
- Cairo1.0中的常量
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——批量铸造打铭文相关工具及网址【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链Dapp开发教程——项目预售阶段恒定价格交易的合约代码实现【pdf+视频BSC链Dapp开发教程下载】
- 使用solana cli工具套件部署spl代币并提交代币元数据metadata信息到solscan上
- redhat linux下装oracle11gRAC (11.2.0.4)多路经ASM多网卡
- BSC链签名验签充提币接口——node.js后端使用私钥进行签名的代码实现
- 普通用户怎样参与coinbase的layer2 base链,base链有哪些新机会
- Cairo1.0中的标量类型(felt,integer,boolean,float)
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——开源项目Polaris自动打EVM铭文【pdf+视频EVM铭文操作教程下载】
- 什么是账户抽象(ERC-4337)?
- Web3初学者教程:什么是区块高度和区块奖励?
- 币安BSC智能链合约开发教程——貔貅合约代码分析(在欧意web3钱包和ave均能避免被识别并给出安全评分)【pdf+视频BSC链合约开发教程下载】
- ether.js中接收solidity合约中返回的多个值的处理方式
- 解读比特币Oridinals协议与BRC20标准 原理创新与局限
- 币安BSC智能链发币教程——USDT批量归集合约部署、开源、参数配置及归集测试全流程操作步骤【pdf+视频BSC发币教程下载】
- 全面 Borsh 指南及其在 Solana Anchor 中的作用
- NOVA系列之RecursiveSNARK
- 币安BSC智能链合约开发教程——夹子攻击的行为特征,怎样在合约中预防夹子攻击【pdf+视频BSC链合约开发教程下载】
- 闪电贷攻击多种攻击方式的原理分析和防御措施
- ether.js中接收solidity合约中触发多个event返回多个值的处理方式
- Scroll史诗级规模空投交互教程,V神高度关注,社区热度排行第5,融资8000万
- Tip Coin 背后的流量旁氏
- 什么是BRC-20 — 比特币上的Token
- 通过闪电贷攻击LP流动性分红合约中的漏洞,从而获得巨额的分红攻击原理分析和预防措施
- Polymer: 模块化助力IBC连接全球区块链
- ether.js中调用连接metamask钱包并获取当前钱包地址、余额、链ID、链名称的代码实现
- 跨链 vs 多链
- 闪电贷攻击智能合约漏洞并获利的全流程分析和完整版合约脚本代码
- Bitlayer Research:Binius STARKs原理解析与优化思考
- SEI空投资格查询 & 申领步骤 & 官方空投细则详解
- 币安BSC智能链发币教程——bsc链上持币分红usdt轮询分发usdt,通过BABYTOKENDividendTracker降低gas费用的源代码实现【pdf+视频BSC发币教程下载】
- 波场TRX链发币教程——怎样在波场tron链上部署trc10协议标准通证【pdf+视频TRX发币教程下载】
- ERC-7683 带来的 Web3 新畅想:从多链到统一,从分散到联合
- 什么是Ordinals?理解比特币 NFT
- 以太坊证明服务 (EAS) 介绍
- Vitalik 上海演讲:以太坊的跨 L2 未来
- 用户自行领取空投的合约功能模块使用说明、部署及开源
- Vitalik: 深入研究用于钱包和其他场景的跨 L2 读取
- 怎样查询链上的TVL及链上热门dapp应用
- Solana SOL链发币教程——Sol链发币教程详解:3分钟创建一个Solana代币合约【pdf+视频SOL发币教程下载】
- ChainTool – 区块链开发者的工具箱 上线了
- Based Booster Rollup 的背景,实践和展望
- 零知识证明, SNARK与STARK 及使用场景
- 初探 Coinbase layer2 Base链 : Base链全新赛道上的潜力项目有哪些?
- 使用 Foundry 命令和脚本,快速部署与开源一个合约
- 监听以太坊地址余额的常用的方法
- 手把手教你用Gin框架写一个web服务
- Easy WP SMTP插件实现outlook邮箱发送邮件到用户注册邮箱
- solidity合约中使用create2方法提前计算部署的合约地址
- 详解以太坊地址生成实战
- zkEVM VS zkVM:一字之差,天壤之别!
- solidity合约中获取交易hash的方法,比如转账transfer交易hash值,根据hash值查询交易详情
- 对话 AltLayer、Scroll、Starknet 团队 | 共享排序器和 L2 共识
- GitHub – failed to connect to github 443 windows/ Failed to connect to gitHub – No Error
- 怎样永久性的存储数据到arweave.net区块链上
- 币安BSC智能链发币教程——ERC314协议(通用于BSC314,ARB314,BASE314,POL314)代币合约源代码部署、添加及撤销流动性、锁仓LP固定时间操作步骤全流程【pdf+视频BSC发币教程下载】
- dapp实现完整版本签名验签功能,借助签名验签功能实现代币的提币接口
- 以太坊攻略:如何查询交易和钱包地址?
- Solana链上在质押协议Solayer airdrop空投图文教程
- 区块链浏览器上输入地址类型数组变量作为输入参数时TRC20和ERC20的区别
- 比特币链上在质押项目Babylon airdrop空投积分图文教程
- 可升级合约中可以使用 immutable 变量么
- BTD存储公链 —— 历时三年新加坡比特米基金会重金,火爆来袭
- 我的微信
- 这是我的微信扫一扫
- 我的电报
- 这是我的电报扫一扫