区块链基本概念 —— 授权

本文讲区块链的一个重要概念 —— 授权。

本文会讲这些内容:

  1. 什么是授权,什么是授权额度
  2. 授权涉及的账户
  3. 怎样用区块链浏览器查询授权情况
  4. 怎样用Remix查询授权情况

1.什么是授权,什么是授权额度

授权就是区块链的某个账户,授权另一个账户,可以使用自己钱包中一定额度的某代币的行为;

授权额度就是授权的时候会有一个额度,这个额度随着被授权者的使用,越来越少,如果被授权者用完额度,就没有权限了;

授权用在需要其他账户操作自己账户的场景下,比如:
授权量化合约可以操作自己钱包的USDT代币,这样可以自动跑量化策略;
把自己钱包的一部分钱授权给对方的钱包账户,用于给对方付款的时候;

……

授权给对方的钱,对方可以随意操作,如果是钱包账户,则通过私钥签名转账给别人或自己,如果是合约账户,则可以通过合约的方法把钱转走或者购买其他代币。

2.授权涉及的账户

很多初学者不明白的是,授权为什么涉及到三个地址,比如:

A账户,把自己钱包的B代币,授权一定额度给C账户使用,就涉及到了三个地址,两个账户地址,和一个代币地址。
这里的账户可以是钱包账户,也可以是合约账户,这里仅仅以钱包账户来举例。

那是谁可以发起授权呢?这是很多初学者搞不清楚的第二个问题。
很多初学者认为是C账户发起交易,把A账户的钱授权给自己。

举个更确切的例子,帮助你理解:
比如,巴韭特,把自己钱包的美金,授权一个亿给我使用,如果有这样的授权,那应该是谁发起的呢?谁有权发起呢?

如果我能够发起这个授权,把别人钱包的钱授权给我使用,那是很大的bug呀,这样是不是就理解谁发起的问题了。

所以授权操作是B代币的所有者发起的,也就是由A账户发起。

3.怎样用区块链浏览器查询授权情况

在区块链浏览器上可以查看授权额度,也可以授权。

由于以太坊链上,账户是不存储数据的,数据都存储在智能合约中,所以授权的数据其实是存储在B代币的合约中的。

本文用bsc区块链浏览器示例,其他的EVM链都是类似的,但是非EVM链应该会有所不同。我们先在区块浏览器搜索B代币的合约,以USDT为例:

搜索到之后,点击Contract,可以查看源码和合约的方法:

在Contract下的Read Contract里,下面有allowance方法,就可以查看授权的额度。

这个方法有两个参数,owner是账户A的地址,spender是账户B的地址,这里查询到A授权给B的额度是0,也就是没有授权。

如果你已经授权了,那么这里就会有数字显示还剩下多少额度。

同样在Contract下,还有Write Contract选项,这个选项下面的所有方法的执行,都需要先连接钱包,因为都需要发起交易,扣除gas费。

该选项下面的approve方法,就是授权的方法,连接钱包的时候要连接账户A的钱包,spender是账户B地址,amount是授权额度。

发起请求后,会要求用私钥签名,如此就向spender授权了一定额度的B代币了。

4.怎样用remix查询授权情况

上述授权方式,是非程序员使用的方式,如果遇到没有开源的代币,而自己有代币的源代码的时候,可以使用Remix进行授权。

将源代码编译完成之后,在部署选项卡中,At Address里面填写上代币的地址:

点击At Address按钮,就可以看到Deployed Contracts下面多了一行,也就是这个地址所在的合约,展开这一行,就可以看到approve方法,它的使用方式和区块链浏览器一致。

往下拉还可以看到allowance方法,它的使用方式也和区块链浏览器一致,这里就不多讲了。

可能你会疑惑,为什么按钮有黄色,有蓝色之分,其实和在区块链浏览器的Read Contract(蓝色)和Write Contract(黄色)之分一样。

蓝色的是读方法,它不会更改区块链的数据,所以调用这一类方法是读数据,本质上并不是交易,所以无需签名,也无需付gas费。

黄色的是写方法,它会更改区块链数据,由于任何改变区块链数据的都是交易,所以调用这一类方法就是交易,需要连接钱包,需要私钥签名,也需要付gas费。

其他

对于程序员来说,自然还会在编程中用上这些方法,比如js,python,java,它们都有对应的库和客户端,可以方便的读区块链数据和发起交易,这个就在以后再讲吧。

另外要提醒的是,虽然授权很方便,但很多链上的安全隐患,都来自授权,所以授权行为要谨慎。

 

发表评论