当前位置:首页 > 物联网 > 区块链
[导读] 在部署运行Chainlink节点预言机合约的过程中,会涉及到很多的地址与账户,今天我们就来解释一下这些地址和账户分别的做什么用的。 合约相关 首先介绍一下以太坊账户相关的基础知识

在部署运行Chainlink节点预言机合约的过程中,会涉及到很多的地址与账户,今天我们就来解释一下这些地址和账户分别的做什么用的。

合约相关

首先介绍一下以太坊账户相关的基础知识。

我们知道,以太坊上的账户分为外部账户(EOA, externally owned accounts)和合约账户(CA, contract accounts),外部账户就是我们普通用户掌握私钥的账户,可以用来存储、转账代币,也可以用来创建部署智能合约。在创建智能合约之后,合约也会拥有一个地址,这个地址和外部账户的地址在形式上没有区别(都是0x开头的16进制字符串),但是合约账户没有私钥,它通过外部账户提交transaction的方式去调用。虽然合约账户没有私钥,但是合约账户却可以持有资金,它的资金和一些重要的权限操作可以被其拥有者owner所控制。一般来说,owner是创建合约的外部账户,但是owner也可以被最初的创建者转移给其他账户。

我们在部署节点的时候,都会部署一个代表我们节点在链上执行request和fulfill的oracle合约。我们部署合约所用到的外部账户,其私钥必须妥善保管,因为它对于oracle合约有强有力的控制权,可以设置节点调用的权限,更重要的是它可以控制合约账户所持有的资金,具体来说就是LINK token。

我们可以看这个oracle合约中

/**

* @noTIce Sets the fulfillment permission for a given node. Use `true` to allow, `false` to disallow.

* @param _node The address of the Chainlink node

* @param _allowed Bool value to determine if the node can fulfill requests

*/

funcTIon setFulfillmentPermission(address _node, bool _allowed) external onlyOwner {

authorizedNodes[_node] = _allowed;

}

/**

* @noTIce Allows the node operator to withdraw earned LINK to a given address

* @dev The owner of the contract can be another wallet and does not have to be a Chainlink node

* @param _recipient The address to send the LINK token to

* @param _amount The amount to send (specified in wei)

*/

funcTIon withdraw(address _recipient, uint256 _amount)

external

onlyOwner

hasAvailableFunds(_amount)

{

withdrawableTokens = withdrawableTokens.sub(_amount);

assert(LinkToken.transfer(_recipient, _amount));

}

/**

* @notice Displays the amount of LINK that is available for the node operator to withdraw

* @dev We use `ONE_FOR_CONSISTENT_GAS_COST` in place of 0 in storage

* @return The amount of withdrawable LINK on the contract

*/

function withdrawable() external view onlyOwner returns (uint256) {

return withdrawableTokens.sub(ONE_FOR_CONSISTENT_GAS_COST);

}

source: https://github.com/smartcontractkit/chainlink/blob/develop/evm/contracts/Oracle.sol#L187

setFulfillmentPermission、withdraw、withdrawable三个方法都是只有owner(所有者)才能调用的。其中withdraw方法,可以理解为一个提币的方法,它将合约账户持有的LINK token转移到其他账户。所以owner账户非常重要,一定要妥善保管。

节点相关

我们在按照文档https://docs.chain.link/docs/running-a-chainlink-node部署节点的时候,也会遇到很多账户。我们以docker方式启动为例,介绍一下这些账户的作用。

节点拥有一个以太坊的外部账户,这个账户会持有一定数量的ETH,用于提交调用oracle合约的事务时支付以太坊网络的交易费用。这个账户是在初次启动chainlink的实例的时候生成的。

我们在第一次启动chainlink示例的时候,比如在执行

cd ~/.chainlink-ropsten && docker run -p 6688:6688 -v ~/.chainlink-ropsten:/chainlink -it --env-file=.env smartcontract/chainlink local n

命令之后,首先会要求我们输入两遍密码(输入和确认),这个密码其实就是节点所拥有的以太账户的keystore的passphrase,必须要牢记,如果丢失了无法找回。

如果我们想把节点的账户地址上的ETH提出来应该怎么操作呢。我们需要找到这个keystore。如果你是按照官方文档的方式创建的节点,keystore会保存在你的节点所在的服务器的~/.chainlink/tempkey目录下(即Chainlink节点运行的主目录下的tempkey目录,请跟据自己节点的部署情况更改路径)。需要注意想要查看keystore内容需要你有服务器的sudo权限。拿到keystore后,就可以在你喜欢的以太坊钱包上用上面提到的密码导入了。

第一次启动chainlink示例的时候,在输入keystore的密钥之后,还会要求你输入一个账户和密码,这个账户密码是chainlink提供的web管理界面的登录用户名密码。这个账户的密码可以按照这篇文档提供的方式来修改。https://docs.chain.link/docs/miscellaneous#section-change-your-api-password

总结

本文我们介绍了Chainlink节点运营相关的4个账户,分别是

· 部署合约的外部账户:用于部署Oracle合约,默认情况下是Oracle合约的Owner(所有者),掌管着账户本身的资金和Oracle合约所持有的资金

· Oracle合约账户:没有私钥,其持有的资金,以及合约的一些重要方法,受其Owner控制

· 节点所持有的外部账户:持有部分ETH,用于在提交完成请求的事务时支付交易费用,可以在需要时将其账户持有资金提出。
来源: Chainlink资讯 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭