00:00
刚才我们说的这种情况呢,其实是我们在尝试的,刚才尝试的各种情况里边都是用户到就普通用户到普通账户的一个付款对吧,一个转账,一个交易,它里边如果没有data的话,就是标准的纯转账,然后消耗的盖,那肯定就是21000。但是如果说他要是加上data的话,就相当于是一个带了留言的,带了一个附言的转账,那至于这个要花费多少盖,那大家可以看到有可能很少,就像我刚才那样,我只加0X就是几个数的话,那可能就比两万一多一点点,但是像刚才大家看到的那个EASTER3上那笔交易的话,那就花到了几十万的几十万的GA,所以还是跟他的这个数据量会相关,所以大家可以看得到啊,因为所有的这些就是加入进来的用户的data台,它都要存储在永久性的,存储在一台房上,所以大家可以想到,既然是永久存储嘛,这肯定你整个的序列化的这个,呃,就是整个的过程也好,还是最后的存储也好,既要消耗计算的资源,又要消耗最后的存储,存储的资源,所以他那个那么长的一封信,转码之后存到一台。
01:23
网上肯定是要花不少盖的,好,接下来我们我们想看的是所有类型的交易,那除了用户。账户,普通账户到普通账户的转账之外,还有普通账户到合约账户的交易,对吧,那这个我们再来看一下,大家应该还记得我们之前remix里边写好的水龙头合约,如果大家没有哦,我这边好像这个网络又有问题了。如果大家要是说还没有把它给弄没的话,我们现在应该还能还能在这里看得到。
02:09
大家可以先回顾一下我们之前的这一个水龙头合约,水龙头合约我们在写好之后部署的时候,我们好像没有注意要去给他什么参数或者是什么东西,对吧?那现在的话我们就来好好的看一下这个东西,当时我们没有注意到的一些细节,现在我们要好好看一下,因为我们已经了解了,呃,就是交易它的本质是什么,它里边带的那些参数到底是什么意思,重新刷新一下,看一下好像是一个remix的编译器,还是没有下载下来,这样我们先给大家讲这边的东西吧,呃,其实我们要做的刚才要做的验证也很简单,就是我们再重新把我们的。
03:07
把我们之前写过的水龙头合约编译好的合约,然后我们再点一次部署,对吧。点部署之后看一下那笔交易里边到底带的什么东西,那那个可能就是我们想要看的,然后我们看一下之前的,呃,我们的部署呢,其实只是点部署,然后直接确认就好了,我们记得当时的那个value都是零,那我们现在可以试一试,是不是可以给一个真正的value呢?呃,这也是我们如果我这边网络不行的话,我觉得就把这个可以就交给大家自己来做了,我觉得这个大家应该都能搞得定,对吧?我们之前两项任务,一项是在run这里,我们啊,我这里deploy都没有啊,有一个deploy按钮是可以部署我们的合约的。那我们现在就再来部署一次,要求是部署的时候就把我们水龙头合约,本来它不是里边没有没有以太吗?我们当时是部署了之后又给他单独冲的,对吧?我们现在要求是部署的时候就让它里边有以太,然后我们直接就能提了。
04:18
大家可以做一下这样的操作,然后感受一下这个过程啊,呃,这这个先作为给大家一个作业吧,我先继续把接下来要跟大家说的一些东西来跟大家再讲一下,好,就是我们刚才所说的去部署一个交易,这个其实是属于我们一个外部账户项目啊,当然那个是另外一个就是部署的话,那是一个特殊的交易啊,等一下我们再讲,如果我们是调那个transfer withraw那个方法的话,那我们相当于是要向合约去传递一个参数的。那传递的那个参数是什么呢?其实就包含了我们告诉以太坊说我这一个交易是要去调合约的。
05:10
肯定有这个信息对吧,另外就是。我调这个合约,是不是还要给这个合约传一个参呢?如果有参数的话,这个参数也得包含在数据里面,贝塔里面,所以大家可以看到,呃,我们整个的这个过程是发送数据负载,所谓的data payload给合约地址的时候,EVM,它会解释成根据我们发过来的payload,把它解释成这是一个函数的调用,然后再从payload里边按照规则解码数函数的名称和参数。之后就是调用函数,在这个EVM里面执行合约调用函数,然后并且把我们的参数传进去,拿到它的返回值,这里边有给大家详细的说一下,就是这也不算太详细啊,就是大家知道有这么个东西就可以就是发送给合约的数据。
06:10
它的这个配的到底是什么东西呢?是32字节的一个编码的东西,就是16进制汉编码的一个东西,32个字节。它里边主要包括两样东西,一样叫做函数选择器,也就是说它指定了EVM,告诉EVM我到时候到底是要调哪个函数。所以它其实就是函数原型的。256哈希的前四个字节。所以是这样的一个东西啊,等等一会儿就是咱们在看那个部署合约的时候,呃,争取能给大家让大家看到那个东西。另外还有就是函数参数,就是根据em定义的各种基本类型的规则进行编码,就是我们要传的入参,经过编码之后的那个东西要传进去,好这是就是泛泛的,而谈的话就是这两样东西,大家先知道这两样东西,这两样东西拼起来就是我们给合约发送,发送一个交易的时候,要调合约里边函数的时候给他的那个data,好这个先这个理论的话确实有点枯燥啊,等一下我们看实际会比较有感觉。最后还有一个东西就是特殊交易,什么是特殊交易呢?就是创建合约的时候,部署合约的时候。
07:37
我们点deploy的时候,那那个交易是一个特殊交易,为什么叫他特殊交易呢?是因为它既不是向一个账户转账。也不是把一个交易发送到一个合约地址上去调用合约,而是它是把一个把一个串贝塔直接发送到一个特殊的目的地址,是一个零地址,就是0X000000,就是整个160位都是零这样的一个地址。
08:12
这就告诉em代表说,我要去创建一个合约,就是这个地址,它就既不代表外部,外部就这个我们的普通的账户,也不代表合约账户,它就是代表创建合约的这个特殊的作用。所以这样的话,那创建合约的这一个交易,当然就是一个特殊的交易了。呃,但是我们要知道这个动作本身也是发起了一个交易,所以我们会看到,如果我们用ma mask的账户去部署合约的时候,它会ma MAS会弹出框,不让我们再去做确认,会从我们的账户里面扣盖呃,GA费对吧?呃,另外就是说。虽然零地址,它仅是用于我这里,又是这个这个写错了啊,不是合同合约啊。
09:06
虽然零地址仅仅仅是用在这个合约注册的这个过程当中,部署合约的过程才会用到零地址,但是就是这个合约注册,一般情况我们是根本没有value的,对吧?肯定就是只有data value的,我们部署合约的时候不会给他去去传入一个一个value,因为如果传入value的话,我们相当于是给零地址传进value去了。所以这个是完全没有必要的,因为零地址它根本就不是我们自己的合约,也不是什么别人的这个账户,所以说呃,这个零地址我们不应该给他传外流,但是他有时候确实是会来到各种有有这个来自各种地址的付款的,那这种情况,如果出现这种情况的话,那可能会有呃两种情况吧,要么就是偶然误操作了,就是我们可能部署合约的时候,一不小心点了,点了给他一个以态,或者是就是转几个币直接给到他那边,或者是有些人在发起交易给别人转账的时候,一不小心把那个地址给删了,自己还给了了零,那就直接发送到这一个零地址上面去了,这样做的结果就是这些仪态永久的失去了,因为没有人对零地址有控制权,没有人能从零地址里边提出以太,这是整个就是以太坊整个的。
10:34
我把它定义好的零地址,就是专门部署合约,注册合约用的,那既然它可以就是传过去之后就可以失去以太,那就说明有些人有可能发就是故意要失去以太的,那这种操作叫做就是销毁以太,大家可能见到呃,有一些交易所,或者是有一些特殊的这些DAPP,或者是什么样的组织,他有时候真的会这么做。
11:02
呃,特别是就是像这个,呃,官方的这些组织对吧,比方说他一开始预售了很多7200万,在矿前就就已经发布了这么多,呃,他有可能在某种情况下就会主动去销毁一些仪态,那这样的做法其实也就是为了呃,就是让自己的这个产品更有价值,或者说让大家更有认同感,让大家认为这些东西不是滥发的,不是就是呃随便都能够拿到的一些东西,这在ICO里边其实是经常见到的一种手段啊,大家如果熟悉的话,就有很多的这个虚拟货币,它其实给自己定义的都是有销毁机制的。尽管现在很多呃,ICO的货币,或者说数字货币,他都没有把这些真正的合约化,他没有写这样的销毁合约,他都是口头去承诺的,说我在什么承什么情况下会去把这些做一个销毁,那他怎么去销毁呢?其实就是把这些固定的币打到零地址上面就销毁了。
12:08
所以呃,这也是一个公开的过程吧,大家可以监督的到,如果零历史上真的有这样的一笔转账的话,那他确实就就是被销毁了。呃,最后就是说。注,合约注册的这个交易,它不应该有value,不应该有以太的值,那它包含的是什么呢?只应该有合约的已经编译之后的字节码。所以我们在去创建合约的时候,给的是没有value,只有data的一个交易,那他的data是什么呢?就是合约编译之后的字节码。啊,这是这一部分内容啊,它的唯一的结果就是注册合约好,这一部分内容就已经全部都讲完了,然后我们还是,哎,我现在好像这边。
13:00
哦,还是还是没有啊,这个网络还是会有一些问题,那我们这个看看一下这个easter STEM上我们能不能看,查看这个领地址吧。呃,我直接输一个零试试啊,这个我没有试过。我们看一下。哎,果然是可以过来,但是这个好像不是我们的,不是我们的零地址,这好像是一个合约啊。啊,它默认是跳到了,呃,0X4那个那个合约上面去,那我们可能需要去敲。地址应该是多少个零,我们加上0X0X0,哎,现在直接就有了,对吧,他直接已经提示出来了,加上刚才没有加0X,所以它直接搜的字符加上0X之后,他认为这是一个X值,对吧?我们看一下这个盈地值。
14:07
大家可以看里边真的,呃,是有很多这些过来的这个交易的,但是真真的有这个value的很少对吧,基本上都没有。哦,0.01这个真的有带value的啊,这个就跟完全提不出来了。正常来讲不应该带value,正常来讲所有的这些交易就应该是一个创建合约的交易,对吧,我们看到这个交易他已经成功了,但是这个这个交易很奇怪,没有。没有input data,所以这个交易就是我们传说中的就是零个以太,零个value是零,然后input data也是零的交易,它的效果是什么呢?其实就是什么效果都没有。就是白白的浪费了这么多这么多盖而已,花了0.01刀。
15:03
呃,不就是发布了这么一笔交易而已,我们还真的看到这个既没有data,也没有有的交易啊,我们另外再看一个,看能不能看到f Co引发的一个。诶,大家可以看这里就是有有东西的啊。这里这一个我们可以先看一下,是不是它能转换成啊,这是乱码,所以说这肯定就不是简简单单的发了一串自己的留言,所以这个正常来讲的话,应该就是一个简单的合约部署,只不过我们不知道它的这个字金啊代表什么意思,看起来很短,所以我们猜测它可能是一个很简单的合约,但是它具体是什么的话,我们不知道。呃,当然就是说现在应该有一些地方有工具,就是可以把字节码做反编译的,呃,因为就是自解码的,这个编译和反编译其实是没有任何的加密的过程的。
16:03
大家从就是源代码能够直接编译出自解码,也能够从自解码直接反编译出源码,所以这个其实都是相当于都是公开源码的,所以这也就是为什么我们说,呃,代码布上去之后,就是所有人都能看得到,而且没有办法去更改,所以这就是零地址上的一些交易啊,我们真的看到了一个啊,零地址上打以太的啊,打了万分之一的以太啊,那也不太值钱。啊,这他一共有1000多个。哦,这里还有一个打了0.013个以态的,这个感觉像是打错的感觉。就好像他是真的要发一笔转账的啊,我们可以看它里面有没有有没有数据,他要是没有数据的话,真的可能就是真的没有数据,那应该他就是本来想转移以上,结果不小心转到零地史上去了,那这个0.0.013个以态,那就那就彻底的失去了,所以这就是零地址啊好,那大家现在可以先在remix里边,先把我们刚才说的这件事情可以先做一下尝试,就是做一下部署,然后部署的时候直接带一个value值去提交到我们的这个,就是给给到这个合约里面看看行不行。
17:35
呃,现在那我先把我们这个网络断开,我直接用自己的热点试着连接一下,好,我现在已经把编译器下下来了,点击一下deploy看一下这个状况。好,大家就可以看到,在这个页面里边,我要发送的是大家可以看到下面的details,对吧?Data在哪里?对至于一说了的话,我们就肯定就知道,所以大家可以看一看啊,这就是我们这个合约的资金嘛,是一串都是16进制的字母。
18:21
0X打头啊,大家可以看到啊。直接要给他转一笔钱,是不是我们应该把这个value给到,假如说我先把它reject上面是有一个value选项的,对吧,我这里假如直接给一个十。大家说我这十个能转到这个合约地址上吗?能不能我现在deploy,咱们看一下这个效果,直接这个报了一个一个这个estimation费用estimation error。Following message哦,他这个报的是这个RPC啊。先看一眼,这里应该是起来的RPC对吧?好,我们重新启动一下,好,现在已经正常起来了。
19:10
应该是OK的啊。好,现在100个以态没有问题,我们现在再尝试去deploy一下。哎,这次好像没有提示错误对吧,好,Confirm。大家现在看它里面带的data,就是就是这个东西,好,我们先去confirm一下。他既然不让我们直接转,那我们现在要尝试的就肯定是调用合约,大家想我们不能直接给他转,那我们在什么时候可以给他转,除了我们用钱包直接往这个地址上去去转币。之前我们给他往里面充钱的时候,我们是用班纳钱包直接充的,对吧,直接转过去的,如果我现在说就是我们用别的方式的话,还有什么可以给他。
20:07
还有可以可以给他转币。如果要给他转币的话,一定是要发起一个交易,然后带上value。那如果向合约发送的交易,那应该是什么呢?就是对合约的函数调用是不是,所以这里边它有一个withdraw方法,那么如果我们去调用这个方法的时候,其实就可以带上Y6是不是,那这个value会给到谁?这就不会给到零地值了。就会给到我们这个合约账户里边来,当然了,现在如果我我现在准备调这个微raw了,然后我随便给一个100,这里我假如说要给他转十个的话,这个大家觉得呃,这样去给他转能成功吗?应该还是成功不了,为什么?因为他现在里边本身是没有钱的。
21:08
那我们如果要去直接掉的话,我们可以看一下这个效果,诶怎么又在报这个。Internal我们看一下啊,三个ction。好。然后我们做一个。大家可以看到在这里它的data我们多看一眼啊,前面我们说到了,就是一个正常的函数,调用的话,它其实是。Oh no,来自这里啊。一个正常的函数调用应该是没有value,但是有data的,对吧?它所有的传递的参数和他告诉EVM要执行哪个函数,所有的这些东西都是放到这里来的。
22:04
所以大家可以看到他传的参数是什么,就是这样一个东西。这样一个东西代表什么意思呢?这其实就是我们之前。在这一页PPT里面跟大家说的函数选择器和函数参数。函数选择器是什么呢?函数原型的256哈希的前四个字节。函数原型是什么东西?大家看,上面就有function type with strong。然后parameters type是U256,这就是它的函数原型。那具体来说,它的函数原型其实是这样的一个东西啊,我们大家在这个里边,它不是用到了这个,呃256的哈希函数吗?在本身这个以太坊自带的这一个工具包里面,它直接是用S3给他做了封装的,所以我们可以直接调到这个封S3WEB3点S3。
23:14
好,然后我们传入一个什么内容呢?我们传入的就是withdraw,然后括号。U256,我们看一下他的,居然少写了一个三。大家可以看一下这个煞三出来的这一个哈希是什么?0X211A7D是不是跟这边一样,对,所以说其实就是它这样的一个函数原型做了这么一个哈希计算。作为这个头放在这里,我们回过头来再看一下这里怎么说的啊,他的哈希的前四个字节。
24:04
那四个字节应该在这里,如果是16进制的话,应该是几位字符?四个字节,大家算一下四个字节应该是多少位吧?多少个比特bit?对,四八三十二个对吧,32个位,那么如果转化成16进制的话,16进制一位应该是四位对吧?这就一个字,一个16进制的字符是四位对吧?那么32位,对,那就应该是八个字符,是不是,我们看一下是不是八个字符,211A7D4D好,后面都是零。那就是我们这边刚才这个哈希计算的前八,前八个字符啊,所以这就是我们这个函数选择器的这个由来。
25:01
那另外大家看中间这个全是零啊,那最后有东西了,最后是0064。0064是多少?大家如果一下子想不到的话,好,我们打开一个计算器吧,程序员,我们用这个XX。零零。六四大家看一下它的十进制值是100,这个100是什么?刚才我们是不是with talk的时候,我输了一个100对,所以它转换成了16进制的字符编码之后放到了这里末尾,而前面我们在这个PPT里面也看了,它的这个有效负载是什么呢?是32个字节的16进制序列化的编码,所以它一定要求是32个字节,所以它的规则就是什么呢?就是我们的函数选择器,取前面的八个就是16进制字放在头,然后参数经过16进制编码之后放在尾中间空余的地方,对全是零。
26:14
所以就是这么一个东西,它就是发送了这么一个东西,好,所以我们就可以直接把它confirm。好好又又又是fail了啊啊,其实这个feel我们可以想象得到的,大家说为什么fail好我们看这里这个,呃,我我们刚才提交的这个交易,大家说生效了没有,生效了没有,大家觉得没有什么效是吧,对我们可以查块。比方说我们去Eth.get transaction from block,我们可以这样,刚刚生成的这个框,我们看它有没有东西,诶有一笔交易,这一笔交易是。
27:07
传十。然后。诶,我们可以看这是不是就是刚才我们发的这笔交易哦,所以这个mama刚才看来看起来这是mama的一个bug啊,哎,现在好像。看来刚才这个。Man ma应该是显示的是有问题的啊,就是我们本身当时那里是给了一个大家看到remix这里本来是一开始的时候,我们是给了一个十的,然后我们以为是他认为这个是非法,所以就直接给到零,但实际上那个还是发出来了,所以所以大家这个可能要注意一点啊,这个我也不知道是因为我这里这个findma,它这个刷新的问题,网络问题,刷新的问题,还是说本来就有这样的问题,所以大家之后可以再注意一下,看他是不是就是有这个问题,但是我们至少可以在这个就是交易信息里边,我们能看到所有的全网,就是它消耗的GA,它的GA price,它是FROM9FD0,这就是我我的这个mama的账号对不对。
28:27
我的ma,呃,Ma ma的账,账户的地址就FD0。呃,对对,就是肯定是合约部署的,就是真正的confirm了。对对,所以这个并不是咱们合约部署的那个交易,对吧,这是咱们最后最新提交的这个交易,我点了就是提100个水龙头的里面的币,然后去去那个呃,叫withdraw的时候发起的这个交易,是这样的一个状态,大家可以看到这里的这个input是不是就是刚才我们看到的那一串,前面是函数选择器,后面0064是那个100对吧,从我们自己的地址到。
29:13
9B834,这应该是我们的合约地址,9B8是多少对吧,最后是2BF22就是这个合约地址,所以这就是刚才我们这个这笔交易,它其实已经发送成功,而且真正的入块,只不过这笔交易失败了。大家可以看到这样的显示,这代表的是这笔交易已经真正的发出去了,已经真正的上链了,只不过它是失败的,如果在easter sc上能看到的话,它就会有一个红色的叹号。对吧,表示这笔交易失败,他为什么会失败,要提币,但是这个合约现在还没有钱,所以这就是为什么我们当时必须要先去给他充,所以大家现在看到我们只有两种方式能给他,呃,能调用这个合约的时候给他传值,但是我们传值的时候呢,这个又会就是失败,那我们看一下这个这个币到底发过去了没有,对吧?Get balance合约地址。
30:30
哎,看还是你,所以这个其实是没有发过来对吧,失败了,所有的这个都没有成功。是这样的一个过程,好,现在大家可以把这一块就是自己来试验一下,来玩一玩这些情况,去部署一个合约,去看一看它的那些参数,甚至就是大家可以直接在自己的guess里边去构建一个交易,去调我们现在,我们现在这个合约如果已经在这里deploy,呃,Deploy之后是不是相当于我们就已经可以在这个GA这边能访问到这个合约了。
31:10
那这个时候我们就直接可以在盖这个里面发一个交易,然后目的地址是这个合约地址,朝这个合约去发交易了,对吧?好大家看一下我这里边,我先给这个交易去发一点币啊send transaction兔我们的。合约地址。VALUE6呃,我们就我三突尾100个啊,不要100跟我们的账户错开啊,50个一好。
32:14
直接发过去了,然后现在我们在get balance,好现在有了,好现在大家想我如果在这里调用的话,正常来讲就应该可以成功了,对吧,我们看一下是不是能够成功啊。嗯。虽然不弹出来,因麦斯克确实有时候行为有点奇怪。好,大家看诶直接就被确认了,所以大家看这一笔交易就真正成功了是不是。所以是这样的啊呃,当然这笔交易我们没有带上value,所以如果我们现在查他的这个balance的话,那肯定就是给我们发了100个这个尾对吧,所以是499999,最后零零发了100个尾,假如我们还想带一个value的话,我们这边指定一个,比方说给一个五个啊,这不能给五个尾啊。
33:12
哎呀,这个我们直接在后面选单位吧,不要这么看他,他这里给的就是尾纪委,还有芬尼和和以太,我们选一个以太吧,然后我去再withdraw一下。诶,他说这个又有问题啊。看起来他好像会禁用我们给这个发送发送以态的这个功能啊好诶这个又又是等待这里的确。好。哎,又给废了,所以诶,但是大家看这里显示的是对的,就是这个我们五个以态是试图去发送的,大家看这一次这五个态发过来没有。没有失败的话,就所有的都没有执行成功,对吧,是这样的。
34:05
呃,所以看起来是在这个合约里边直接去指定调用的时候给这个value,它这里是不成功的啊,但事实上我们在这个过程当中是可以直接好好吧,这个这个是是我的问题啊,没有想到他这个为什么失败,他的失败在于其实不是说不是说他不允许啊,是在于什么。这这个大小有关系吗?就是是跟咱们这个有关系吗。觉得有关系是吗?对对对对对,这个其实没关系的,这个问题在于。大家还记得我们一开始就是直接给这个合约账户转账的时候也转不过去吗?因为我们后面没有一个关键字。叫pale。
35:02
对吧。我们加了这个之后,才代表这个合约是可以接收转账的,那么同样这个是直接给合约转账的时候是会调到这里来,那我们如果调withdraw的时候呢,想要同时转账,那就必须withdraw,也得是payable才可以。所以这个问题其实在这里,刚才我一下没有想到,所以说差一点错怪了这个我们的ma mask,所以我们现在要做的其实是在这里加一个配偶,然后我们再重新编译一下,它应该编译通过了吧,对。这时候我们还是重新来一遍吧,我们再把它部署一下。Deploy。他他真是一直不弹出来了啊,我看到有些同学在ma好像也是从来不不弹出来的这种状态,现在好直接就成功了,现在我们很快速的来做一下这个操作,现在提肯定提不出来,因为它里面没有钱,对吧?呃,我们在这里get balance看一下。
36:17
确认一下这个地址肯定不一样的,对吧,我们重新重新部署之后,地址绝对不一,诶怎么没复制过来。好。大家看现在的这个肯定是一个零,那么我们还是把这一句复制过来之后,给他转50个。好,现在有了,有50个了,那么现在我们试着调我们的水龙头的withdraw函数,转五个以态的同时给一个Y,然后还要提,呃,我们来个奇怪的数吧,123个尾。
37:05
呃,这个应该是尾对吧,单位是尾好,大家看一下它的行为会是怎么样,Withdraw在上。好,这里显示的是完全正确的对吧?同这里发送的就是我们真正的要发给这个合约多少个,然后呢,他的data塔我们看一下,还有我们看前面这个还是一下21A7D4D,因为函数选择器是一样的,只跟它的函数类型有关,对吧,那后面的这个就不一样了,7B。那大家肯定已经知道了,如果是7B的话,七好,我们先把它C一下啊七。B在哪里?7B123对,没毛病,好confirm一下。
38:01
你看诶,现在成功了,成功之后我们来最终校验一下该balance,大家觉得这个balance应该是多少,有有同学呢,啊,当然这个可能不太好报啊,就是大家可以说他的算法应该是怎么怎么算,本来是50个。45个,然后再减去123是吗?就是一百三一百二十三个尾,所以是四,四多少多少吗?开头应该是多少,大家觉得。或或者我们前面直接加上这个from啊三哎,对,刚才是谁说的,说的非常对啊,难道不是我们给水龙头合约往上打了五个吗?为什么他要减五呢?他道不应该多吗?好,我们看一下是多少个。
39:03
54.999999,最后是887887呢,肯定就是减了123对吧?对这个减123没毛病,是我们点了提取,他要给给我们发,但是它的值比之前还多了。那是因为我们本来给他转了五个对吧,他现在应该是55个,然后再减掉这个123,所以他这个就看清楚他的行为了,大家就把这个。我们刚刚说的这一块,可以自己再好好的操作一下。
我来说两句