主页 > 华为安装imtoken > 以太坊账户相关基础知识解析

以太坊账户相关基础知识解析

华为安装imtoken 2023-09-25 05:12:59

在部署和运行Chainlink节点预言机合约的过程中,会涉及到很多地址和账户。 今天我们将解释这些地址和帐户的用途。

合约相关

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

我们知道以太坊上的账户分为外部账户(EOA,external owned accounts)和合约账户(CA,contract accounts)。 外部账户是我们普通用户拥有私钥的账户,可以用来存储和转移代币。 它还可以用于创建和部署智能合约。 智能合约创建后,合约也会有一个地址,与外部账户的地址在形式上没有区别(均为0x开头的十六进制字符串)以太坊有哪几种账户,但合约账户没有私钥,这是通过外部账户提交的Transaction方式来调用的。 合约账户虽然没有私钥,但是合约账户可以持有资金,其资金和一些重要的权限操作可以由其所有者控制。 一般来说,owner是创建合约的外部账户,但owner也可以由原创建者转移到其他账户。

基于以太坊账户相关的基础知识解析

当我们部署节点时,我们将部署一个预言机合约,代表我们的节点在链上执行请求和执行。 我们用来部署合约的外部账户的私钥一定要妥善保管,因为它对预言机合约的控制力很强,可以设置节点调用的权限,更重要的是可以控制合约持有的资金帐户。 具体来说,LINK 令牌。

我们可以看看这个预言机合约

/**

* @notice 设置给定节点的执行权限。 使用 `true` 允许,使用 `false` 禁止。

* @param _node Chainlink节点的地址

* @param _allowed Bool值判断节点是否可以完成请求

*/

函数 setFulfillmentPermission(address_node, bool_allowed) external onlyOwner {

authorizedNodes[_node] = _allowed;

}

/**

* @notice 允许节点运营商将获得的 LINK 提取到给定地址

* @dev 合约的所有者可以是另一个钱包,不一定是 Chainlink 节点

* @param _recipient 将 LINK 令牌发送到的地址

* @param _amount 发送的数量(以wei指定)

*/

函数撤回(地址 _recipient,uint256 _amount)

外部的

只有所有者

hasAvailableFunds(_amount)

{

withdrawableTokens = withdrawableTokens.sub(_amount);

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

}

/**

* @notice 显示可供节点运营者提取的LINK数量

* @dev 我们使用 `ONE_FOR_CONSISTENT_GAS_COST` 代替存储中的 0

* @return 合约上可提取LINK的数量

*/

函数 withdrawable() 外部视图 onlyOwner 返回 (uint256) {

返回 withdrawableTokens.sub(ONE_FOR_CONSISTENT_GAS_COST);

}

来源:#L187

setFulfillmentPermission、withdraw、withdrawable这三个方法只能被所有者(owner)调用。 其中,withdraw方法可以理解为提币方法,将合约账户持有的LINK代币转移到其他账户。 因此,车主账号非常重要,必须妥善保管。

节点相关

我们在按照文档部署节点的时候,也会遇到很多账号。 下面就以docker为例介绍一下这几个账户的作用。

节点有一个以太坊的外部账户以太坊有哪几种账户,该账户会持有一定数量的ETH,用于支付调用预言机合约提交交易时支付以太坊网络的交易手续费。 该账户是在 chainlink 实例首次启动时生成的。

当我们第一次启动chainlink实例时,比如执行时

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

命令后,首先会要求我们输入两次密码(input and confirmation)。 这个密码实际上是节点拥有的以太账户的keystore的密码。 一定要牢记在心,丢了就找不回来了。

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

第一次启动chainlink实例时,输入keystore密钥后,会要求输入账号和密码。 该账号密码为chainlink提供的web管理界面的登录用户名和密码。 可以按照本文档提供的方式修改该账号的密码。 #section-change-your-api-密码

总结

在本文中,我们介绍了与Chainlink节点操作相关的四个账户,分别是

部署合约的外部账户:用于部署Oracle合约,默认是Oracle合约的Owner(拥有者),负责账户本身的资金和Oracle合约持有的资金

· Oracle合约账户:无私钥,持有的资金,合约的一些重要方法都由其Owner控制

· 节点持有的外部账户:持有部分ETH,用于提交交易完成请求时支付交易手续费,需要时可以提取账户持有的资金。