Web3 叙述交易所授权置换概念 编写transferFrom与approve函数

这篇具有很好参考价值的文章主要介绍了Web3 叙述交易所授权置换概念 编写transferFrom与approve函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前文
Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约
中 我们通过ERC-20一种开发者设计的不成文规定 也将我们的代币开发的很像个样子了
我们打开 ERC-20文档
我们transfer后面的函数就是transferFrom
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
这个也是 一个账号 from 发送给另一个账号 to 数量 value
他是一个不成文规定
transfer取的是 msg.sender 意思是 谁操作触发了这个函数 from 就代表谁

而 transferFrom 则是 我们之后交易所来调用的
也就说是 你授权的交易所 就会有能力通过调用 transferFrom 转走你授权数量的代币
所有授权 相对来说还是个较为危险的操作
那么 也就是说 approve 是调用transferFrom的基础 你要先授权
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
approve方法的话 你可以授权多个机构 例如 你的代币 10000 你可以授权 A机构 3000 B机构 3000
C机构 3000 但当你操作授权后真的会有这么多代币进入 A B C机构中 不然别人怎么用呢?
被授权后他就有这个额度的使用权
你也可以 简单理解为 我们分配给银行 你可以自己留在手里 或者 放在银行里
例如 给ABC银行各3000代币,都是一年定期,在这个期间中 银行对你的代币是有一个支配权的。在这一年中你的代币怎么被流通,你是不知道的,反正到最后能把钱取出来就完事了。
然后,之前被我们比作银行的交易所,他们就会发布订单,例如 你愿意用 1000GRtoken 换 1 ETH吗?
如果此时 我们操作愿意
这里 就像买一个商品一样,此时 A交易所的代币就会少一千,但你的账号就会多1ETH

所以 之后 我们就要用 模拟出来的区块链环境账号 分配给 ABC三个交易所 一定数量的代币 然后 在ABC交易所中就会有对应的订单池
在这个池子中 就会有别人创建的订单
你就可以看合不合适 如果合适 就直接下单

当然 这一块 光看描述 确实换谁来了都没那么好理解
还是先通过代码 将方法创建好

这里这个approve函数 我们直接整个复制过来
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
直接放到我们自己的这个代币合约上去
函数的一个专属花括号 我们还是得自己加一下
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
这个方法 有三个重要的值
第一个是 msg.sender 这个要取当前登录的用户
这个参数 代表当前登录的用户 因为 肯定要用户来和交易所授权给定代币
然后 就是这个函数中的两个参数 _spender 交易所的地址 _value 给定授权的代币数量

但 approve中还需要像一个 js对象一样的数据结构
例如这样

{
    a机构: 300,
    b机构: 400
}

机构对应授权代表数量
但在solidity中对象显然不是这样的

我们先要定义一个对象

mapping(address => mapping(address=>uint256)) public allowance;

这里 我们定义 一个 mapping 对象 键对应的值 又是一个对象类型 然后 这里面这个对象 键对应的值 是一个uint256数字类型的 然后 public 表示这是一个公共的 变量名叫 allowance
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
然后 我们编写approve方法如下

function approve(address _spender, uint256 _value) public returns (bool success) {
     require(_spender!=address(0));
    allowance[msg.sender][_spender] = _value;

    return true;
}

这里 我们先用require判断_spender 交易所的地址是否有问题 当然这里只是个很弱的判断
address(0) 就类似于 null只是这个类型的 空 相当于这是个非空的格式判断
然后 在我们刚刚创建的allowance 下键为msg.sender下的键为_spender的值 复制微 对应 value
例如 当前登录的账号是 t1 在allowance 下找到键等于t1 下的一个对象 然后在这个对象中找到 和操作的交易所相同的键 将value赋值上去

数据结果或许可以理解为这样

{
    t1用户: {
        A交易所: 1000
    }
}

当然这是一个js的展现形式 方便大家理解
然后 返回了一个ture 因为 这个函数设置了returns (bool success) 要求返回一个布尔类型的值

这里需要强调一下require的好处 除了会将错误日志记录在区块链的日志中
还可以规避燃料费无故消耗
如果中间错误 你用的require 执行不成功 燃料费会退回

approve在官方文档中介绍 还要触发一个Approval事件
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
我们直接整个复制到自己的合约上
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
直接在approve函数中 返回true之前 调用一下

emit Approval(msg.sender,_spender,_value);

Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
这里 我们传入 当前账号 交易所地址 数量

好啦 那么 approve这个授权的方法都写好了 那么 自然我们前面说的 transferFrom 就可以开始了
先从文档中拿过来
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
花括号自己加一下

这个方法是被授权的交易所来调用的
而 这里三个参数 _from 付款账号 _to 收款账号 _value 数量
而在这个方法中 msg.sender拿到的是调用这个方法的交易所地址

但是这里有个问题 我们要将transfer改一下
我们改成
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
这里 我们直接将transfer原本的逻辑 抽离成一个_transfer函数
这样方便外界调用

这样 我们就可以这样写 transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value);
    _transfer(_from,_to,_value);
    return true;
}

这里 我们现在allowance中 找到 付款账号对应对象下的 交易所对应下的值的 value 调用sub将他减去
然后 我们两个账号之间的转入 我们直接用刚刚拆出来的 _transfer 就好了
因为 如果你不拆
原本那种用msg.sender的
msg.sender拿到的不是 付款账号 而是交易所地址 因为transferFrom是交易所调用的 然后 transferFrom中调用的_transfer 所有 你如果取msg.sender 取到的是交易所

当然 这前面还是得加个判断 如果你授权给交易所的代币都不大于value 那么 交易肯定是没办法执行的
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
我们在合约中写的这两个对象 可以理解为 他们是一个变量 但其实 在去中心化的区块链中 他们就是数据库存储 他们将数据挂到了区块链上
Web3 叙述交易所授权置换概念 编写transferFrom与approve函数,区块链
且这种数据也不能随意更改 公开透明的文章来源地址https://www.toymoban.com/news/detail-619229.html

到了这里,关于Web3 叙述交易所授权置换概念 编写transferFrom与approve函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【交易所相关】网关、席位、交易单元

    交易网关(TDGW)是为向会员等市场参与者提供交易接入而设计开发的应用软件,交易网关作为交易报盘定位的客户端,提供基于socket的交易流接口。 网关指放置在会员处、用于连接会员与本所交易系统的软硬件设施。会员可同时使用多个网关进行报盘,但不允许使用他人的网关

    2024年01月20日
    浏览(34)
  • 各地相继设立交易所,抢滩大数据交易市场

            11月15日,深圳数据交易所正式揭牌成立,并启动首批线上数据交易。目前,深圳数据交易所累计交易额已突破11亿元。除深圳外,贵阳、北京、上海等地数据交易所也陆续上线。数据作为新型生产要素,正成为各方争相入局的新赛道。 多位业内人士在接受记者采访时

    2023年04月17日
    浏览(73)
  • 交易所行情基础相关知识

    目录 一、行情基本概念 二、简单交易模型 三、行情系统结构 四、各种行情协议 1.FIX  2.STEP 3.FAST 4.Binary  五、集合竞价和连续竞价 1.集合竞价 2.连续竞价 六、上交所LDDS和深交所Binary行情对比 行情是描述市场繁荣状态的数据,比较笼统,例如买卖交易量。准确一些的描述是

    2024年02月12日
    浏览(44)
  • UNUNX安全的交易所

    去中心化 传统意义上的交易所都属于中心化的交易所,用户需要在交易所注册人个信息,办理银行卡,充值到交易所帐号才能交易此时你的资产是在交易所被交易所托管,如果交易所做恶用户将会蒙受损失,交易所关闭跑路的案例也是层出不穷,但他们都有一个共性,那就是

    2024年02月04日
    浏览(31)
  • 交易所做市机器人

    从本质上讲,量化交易机器人或做市机器人是一种软件程序,它们通过API直接与金融交易所进行交互,收集并解读市场信息。这些机器人基于对市场数据的解读,代表用户发出交易指令。这些机器人通过监控市场趋势,如交易量、订单、价格和时间等,并依据预设的编程规则

    2024年01月22日
    浏览(38)
  • 干货 | 大数据交易所数据安全流通体系标准化尝试

    以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。 第一部分:国内大数据交易所发展现状 第二部分:国外大数据交易模式及法律法规 欧盟的数据交易模式是基于2022年5月16日所提出的《数据治理法案》,其中提出了 数据中介 这一新的商业

    2024年02月17日
    浏览(36)
  • 智能合约安全分析,假充值攻击如何突破交易所的防御?

    引言 假充值攻击,是指攻击者通过利用交易所在处理充值过程中的漏洞或系统错误,发送伪造的交易信息到交易所钱包地址,这些伪造的交易信息被交易所误认为是真实的充值请求,并将对应的数字资产或货币添加到攻击者的账户中。攻击者利用这种方式,可以获得未经支付

    2024年02月09日
    浏览(34)
  • 深度分析去中心化交易所的优缺点

    一、什么是去中心化交易所? 去中心化交易所,英文名称Decentralized Exchange,简称DEX。与中心化交易所不同,DEX不需要注册账户并认证,用户使用数字资产账户即可进行交易。每笔交易都通过区块链进行,需要等待区块链的确认才算交易成功。 二、去中心化交易所或协议 目前

    2024年02月02日
    浏览(30)
  • FX110网:泛欧交易所2月份的外汇交易量月环比下降9.6%

    欧洲最大的证券交易所泛欧交易所(Euronext)更新了其2024年2月份的交易数据。数据显示,该交易所当月的外汇交易量出现环比下降。 泛欧交易所2024年2月交易概况 Euronext FX 2024年2月,泛欧交易所外汇交易市场Euronext FX的交易总额为4957.76亿美元,较1月份的5485.23亿美元环比下降

    2024年04月23日
    浏览(37)
  • 郑州商品交易所:数智一体化助力交易所数字化转型

    近日,星环科技在线上举办了2022年春季新品发布周,带来数字底座、数字化转型、国产替代、数据安全与流通四大专题,60余场演讲。来自金融、能源、交通、政务、高校、运营商等多个领域的客户、合作伙伴现身说法,分享数字化转型成功经验。 郑州商品交易所科技监管负

    2024年01月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包