加载中 ...
首页 > 基金 > 基金要闻 > 正文

usdt手续费费率是多少,usdt手续腾达建设股市费多少钱

2023-12-23 12:33:28 来源:倾延资

免责声明:本文旨在传递更多市场信息,不构成任何出资主张。文章仅代表作者观念,不代表火星财经官方态度。

边肖:记得要会集注意力。

来历:慢雾科技

撰文:Thinking @ 慢雾安全团队

事情布景

剖析来自一笔转账金额为10w usdt的买卖,但手续费高达7,676 ETH。

ethers can . io/tx/0x2c 9931793876 db 33 B1 a9 aad 123 ad 4921 DFB 9 CD 5 e 59 dbb 78 ce 78 f 277759587115

中心点

技能层面的中心问题是ethjs-util的intToBuffer不支持传入的浮点数据,ethereumjs运用ethjs-util的intToBuffer。

简而言之:Dapp在运用ethereumjs结构买卖时,假如传入的手续费有小数,会因为类型转化的bug而回来一个大数作为浏览器中的手续费。而且硬件钱包也没有清晰展现,导致用户在这儿直接授权和签署天价费的买卖。

要害代码剖析

依据这个问题

github . com/ethereumjs/ethereumjs-mono repo/issues/1497的描绘,开端剖析。

咱们用倒叙的方法解说问题,这样更简单了解。中心问题是ethjs-util的intToBuffer不支持浮点数据。

首要看键码。ethereumjs的问题提的比较多。首要重视两个参数的值,maxPriorityFeePerGas和maxFeePerGas。因为传入的浮点型,导致计算过错,得出过错的程序,形成“天价手续事情”。

经过剖析,这两个参数被toBuffer处理,所以对toBuffer进行剖析。

github . com/ethereumjs/ethereumjs-monorepo/blob/cf 95 e 04 c 6a/packages/tx/hide/EIP 1559 transaction . ts # L200-L201

this . maxFeePerGas=new BN(to buffer(maxFeePerGas===' '?0x ' : maxFeePerGas))this . maxPriorityFeePerGas=new BN(to buffer(maxPriorityFeePerGas===' '?0x' : maxPriorityFeePerGas))

ToBuffer会调用ethjs-util的intToBuffer函数,首要处理两件事。

github . com/ethjs/ethjs-util/blob/e9 aede 6681/dist/ethjs-util . js # l 1950

函数intto buffer(I){ var hex=intto hex(I);回来新的缓冲区(padToEven(hex.slice(2)),' hex ');}

将int变成hex github . com/ethjs/ethjs-util/blob/e9 aede 6681/dist/ethjs-util . js # l 1939

函数intToHex(I){ var hex=I . tostring(16);//eslint-disable-line回来“0x”十六进制;}

确认它是否能被2整除。假如没有,就需要在字符的最初加一个0。这儿,首要意图是成功地将2组1数据写入缓冲区。github . com/ethjs/ethjs-util/blob/e9 aede 6681/dist/ethjs-util . js # l 1920

函数padToEven(value){ var a=value;//eslint-disable-line if(type of a!==' string '){ throw new Error(' while padding to even,value有必要是string,当时是' typeof a ',while padToEven ');} if(a . length % 2){ a=' 0 ' a;}回来a;}

过错地

示例数据:33974229950.550003 进行剖析,经过 intToBuffer 函数中的 intToHex 和 padToEven 处理后得到 7e9059bbe.8ccd,这部分浏览器 js 和 nodejs 的成果都是共同的。

不共同的当地是在 new Buffer 的操作:

new Buffer(padToEven(hex.slice(2)), 'hex');

处理方法剖析:浏览器 js经过 webpack 打包好 js 文件并对文件进行引证,然后在浏览器上进行调试剖析。

首要输入的示例字符 33974229950.550003 会进入到 intToBuffer 的函数中进行处理。

同步剖析 intToBuffer 的处理进程,这部分和」要害代码剖析「部分的代码逻辑是相同的,处理转化部分得到的成果是 7e9059bbe.8ccd。

接下来剖析如何将转化后的字符填充进入的 buffer 中,经过这步能够得到 buffer 的内容是 126, 144, 89, 187, 14, 140, 205 对应的是 7e, 90, 59, bb, e, 8c, cd。

> 0x7e -> 126> 0x90 -> 144> 0x59 -> 89> 0xbb -> 187> 0xe -> 14> 0x8c -> 140> 0xcd -> 205

这儿发现 e. 这部分的小数点消失了,所以开端解小数点消失之迷,追寻到 hexWrite 这个函数,这个函数会将得到的数据 2 个一组进行切分。然后用了 parseInt 对切分后的数据进行解析。

可是 parseInt('e.',16) -> 14===parseInt('e',16) -> 14 消失的小数点被 parseInt 吃掉了,导致终究写入到 buffer 中的数据产生了过错,写入 buffer 的值是 7e9059bbe8ccd。

处理方法剖析:nodejs因为浏览器上出问题的是 7_**__**_e9059bbe.8ccd 在写入 buffer 的时分小数点被 parseInt 吃掉了导致数据犯错,可是经过剖析,node 的数据也是过错的,且产生过错的原因是和浏览器的不相同。

首要咱们先看下如下的示例:

node 三组不同的数据填充到 buffer 得到的成果居然是相同的,经过剖析 node 的 buffer 有个小特性,便是 2 个一组切分后的数据,假如无法正常经过 hex 解析的,就会把那一组数据以及之后的数据都不处理了,直接回来前面能够被正常处理的那部分数据。能够了解为被切断了。这部分能够参阅 node 底层的 buffer 中 node_buffer.cc 中的代码逻辑。

> new Buffer('7e9059bbe', 'hex') > new Buffer('7e9059bbe.8ccd', 'hex') > new Buffer('7e9059bb', 'hex')

履行成果的比较node 因为会将原始数据 7e9059bbe.8ccd 中的 e. 及之后的数据进行切断,所以终究过错的值是 7e9059bb,比较正确的值 07e9059bbe 小。

node 的履行成果:

浏览器因为会将原始数据 7e9059bbe.8ccd 中的 . 吃掉,所以终究过错的值是 7e9059bbe8ccd,比较正确的值 07e9059bbe 大许多。

浏览器的履行成果:

问题的原因ethjs-util 的 intToBuffer 函数不支持浮点型的数据,且在这个函数中没有判别传入的变量类型,来确保变量类型是预期内的。因为 ethereumjs 的 toBuffer 引证了 ethjs-util 的 intToBuffer 进行处理,也没有对数据进行查看。导致了这次事情的产生,所幸终究仁慈的矿工归还了「天价手续费 7626 ETH」。 汲取的经验 从第三方的库的视点来看,在编码进程中应该要遵从牢靠的安全的编码标准,在函数的最初要对传入的数据进行合法性的查看,确保数据和代码逻辑是依照预期内履行。

从库的运用者的视点来看,运用者应该要自行阅览第三方库的开发文档和对接文档,而且也要对代码中接入第三方库的逻辑进行测验,经过结构很多的数据进行测验,确保事务上能够正常依照期望履行,确保高标准的测验用例的覆盖率。

参阅资料 :github/ethereumjs/ethereumjs-monorepo/issues/1497blog.deversifi/23-7-million-dollar-ethereum-transaction-fee-post-mortem/chainnews/news/611706276133.htm

猜你喜欢的标签:混债 李儒雄

“走马消息,分享精选全球有价值的财经新闻”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服邮箱,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。

  • 声音提醒
  • 60秒后自动更新
  • 中国8月CPI年率2.3%,预期2.1%,前值2.1%。中国8月PPI年率4.1%,预期4.0%,前值4.6%。

    08:00
  • 【统计局解读8月CPI:主要受食品价格上涨较多影响】从环比看,CPI上涨0.7%,涨幅比上月扩大0.4个百分点,主要受食品价格上涨较多影响。食品价格上涨2.4%,涨幅比上月扩大2.3个百分点,影响CPI上涨约0.46个百分点。从同比看,CPI上涨2.3%,涨幅比上月扩大0.2个百分点。1-8月平均,CPI上涨2.0%,与1-7月平均涨幅相同,表现出稳定态势。

    08:00
  • 【 统计局:从调查的40个行业大类看,8月价格上涨的有30个 】统计局:从环比看,PPI上涨0.4%,涨幅比上月扩大0.3个百分点。生产资料价格上涨0.5%,涨幅比上月扩大0.4个百分点;生活资料价格上涨0.3%,扩大0.1个百分点。从调查的40个行业大类看,价格上涨的有30个,持平的有4个,下降的有6个。 在主要行业中,涨幅扩大的有黑色金属冶炼和压延加工业,上涨2.1%,比上月扩大1.6个百分点;石油、煤炭及其他燃料加工业,上涨1.7%,扩大0.8个百分点。化学原料和化学制品制造业价格由降转升,上涨0.6%。

    08:00
  • 【日本经济已重回增长轨道】日本政府公布的数据显示,第二季度经济扩张速度明显快于最初估值,因企业在劳动力严重短缺的情况下支出超预期。第二季度日本经济折合成年率增长3.0%,高于1.9%的初步估计。经济数据证实,该全球第三大经济体已重回增长轨道。(华尔街日报)

    08:00
  • 工信部:1-7月我国规模以上互联网和相关服务企业完成业务收入4965亿元,同比增长25.9%。

    08:00
  • 【华泰宏观:通胀短期快速上行风险因素主要在猪价】华泰宏观李超团队点评8月通胀数据称,今年二、三季度全国部分地区的异常天气(霜冻、降雨等)因素触发了粮食、鲜菜和鲜果价格的波动预期,但这些因素对整体通胀影响有限,未来重点关注的通胀风险因素仍然是猪价和油价,短期尤其需要关注生猪疫情的传播情况。中性预测下半年通胀高点可能在+2.5%附近,年底前有望从高点小幅回落。

    08:00
  • 【中国信通院:8月国内市场手机出货量同比环比均下降】中国信通院公布数据显示:2018年8月,国内手机市场出货量3259.5万部,同比下降20.9%,环比下降11.8%,其中智能手机出货量为3044.8万部,同比下降 17.4%; 2018年1-8月,国内手机市场出货量2.66亿部,同比下降17.7%。

    08:00
  • 土耳其第二季度经济同比增长5.2%。

    08:00
  • 乘联会:中国8月份广义乘用车零售销量176万辆,同比减少7.4%。

    08:00
  • 央行连续第十四个交易日不开展逆回购操作,今日无逆回购到期。

    08:00
  • 【黑田东彦:日本央行需要维持宽松政策一段时间】日本央行已经做出调整,以灵活地解决副作用和长期收益率的变化。央行在7月政策会议的决定中明确承诺将利率在更长时间内维持在低水平。(日本静冈新闻)

    08:00
  • 澳洲联储助理主席Bullock:广泛的家庭财务压力并非迫在眉睫,只有少数借贷者发现难以偿还本金和利息贷款。大部分家庭能够偿还债务。

    08:00
  • 【 美联储罗森格伦:9月很可能加息 】美联储罗森格伦:经济表现强劲,未来或需采取“温和紧缩”的政策。美联储若调高对中性利率的预估,从而调升对利率路径的预估,并不会感到意外。

    08:00
  • 美联储罗森格伦:经济表现强劲,未来或需采取“温和紧缩”的政策。美联储若调高对中性利率的预估,从而调升对利率路径的预估,并不会感到意外。

    08:00
  • 美联储罗森格伦:鉴于经济表现强劲,未来或需采取“温和紧缩的”政策。

    08:00