00:00
我们讲到创建合约的时候,其实跟大家讲的是说创建合约的实例,在JS里边的实例,合约实例,那大家可以看到我们当时提供了两种。创建JS合约实例的方法,一种呢是就是contract at这种模式,它后面跟的是address,是一个地址,所以它用于什么呢?就是我们已经合约都已经部署好了,已经放在上面了,而且我们也知道他地址是什么。然后我们就直接。就是把API传进来之后,下下面一步就是my contract.at就可以了,就像我们今天的脚本里面就是用的这种办法,对吧?API这只是我们的一个参数定义,还有这个address,这也只是一个参数定义,所以大家看我们真正做的其实就这两步,就是con contract等于这个contract API。定义一个抽象的concept,然后我们定义一个实例contract instance,抽象的contract at这个地址,所以就是这两步已经部署好的,如果我们要获取这个合约实力就这两步,那如果说要是我们还没有部署呢,那就会比较麻烦一点,大家可以看到就是需要用我们下面这个方法,相当于是要重新部署一个合约。大家一定要注意,这一步就是my contract的点new这一步它是要给我们的区块链节点上发送一笔交易的。
01:35
所以这个并不是及时生效的,像我们前面这个APP的一个地址,这个其实我们只是改变了本地的JS对象,它里面的一个属性,所以这个可以说是及时生效,我们直接就能用的,指定了就可以了,但是这里的CTRl.new这个大家看到后面是有一个交易对象的。所以它是一个交易。那我们如果在用的时候,就不可能说我这里啊,如果没挖矿的话,那我们点new就会发现,诶不生效,我拿不到这个合约的地址,或者说如果大家这里就是用采用异步的方式,这里一边去拗,然后另外一边去做一些操作的话,就会发现好像这个合约还不可用,这些都是有可能的,呃,所以我们课件里边这个这个contract new是很简单的一步,它其实是把我们昨天我在这里手操作的几步综合在一起放在这里的。
02:36
那我昨天做的几步操作是什么呢?我在这里再简单的给大家敲一下,但是大家可能没有这个课件了,就是大家如果昨天没有听听清楚,或者是没看清楚我的演示的话,我在这里再给大家看一下啊,就首先我们还是应该有上面这一步,拿到这个my contract这个抽象的合约对象,就是把API存进去,对吧,这一步首先是肯定是需要有的。
03:03
嗯,然后我们下边在定义这个实例的时候,Instance的时候,就是my contract.new这一步。里边要传参数,传什么参数呢?前面的这些就是它的构造函数里面的参数,假如有的话,所以大家看到这个方框,方括号框起来的这些都是可有可无的。对于我们现在的这个合约,就是我们的这个靠影子子货币的这个合约而言,我们根本就没有构造函数,里面没有参数,所以我们这里前面都没有。那我们真正要传进去的是一个什么东西呢?真正要传进去的是后面这个交易对象。所以大家可以记得,我当时是定义了一个叫做。呃,我是叫做啊trans transaction。的一个OG对吧?Object,所以我是管它叫做部署交易对象,这个对象等一下我们就会再给到contract instance的时候,我们直接就是my contract.new我们里边的参数就是这个。
04:22
Deployed。Deploy transaction OB,所以就是这样,所以大家看,如果把它综合起来的话,其实就是这么一句,但只不过是我们想要看的清楚一点,昨天我给大家做的操作就是一步一步来,对吧,写成一长串的话,大家看不懂,所以我们就把这个deploy transduction o BG单独的把它列出来,它是一个交易对象,那里边包括什么呢?包括一个data,我们先不给值啊,然后后边是from from,大家都知道了,我们一般一般就是web3.1点ACCOUNTS0,对吧,我这里就不写了啊。
05:00
那之后就还是还有一个guess guess当然就是这里给的100万,可能大家实际部署不够,不够的话调大还有可能超过上限,超过我们block limit那个上限,呃,那大家就把它再调小,所以这个大家就是随时调整,那主要要看的是这里面这个data。Data,我们看这里其实是整个这个解码对吧。那这个字节码呢,我们自己又不好去,就是我们不好直接去拿到,因为我们在编译之后生成的那个。编译之后生成的那个并文件里边,它存着的是不带零前缀的。所以我们从那里边复制出来的东西呢,是要把它放在我们当时又定义了一个叫做bad code的东西,这里的data要给的就是bad code,对吧?所以我们定义了bad code之后,这里就可以直接给这个变量就可以,那bad code是什么呢?当时我们给的是前缀0X字符串拼接,然后加上我们从这个我们的并文件里面复制出来的那一串代码,对吧,把它转换成字符串,所以大家看我们昨天是做了这么几步。
06:13
就首先前面还是我们把abi先传进来,然后my contract等于WEB3点Eth.contract API,所以前面是还有一步,大家如果记的话,就会记得我前面好几步对吧,就我完整的再写一遍啊,就是会API,我们把那个API文件里面的那一串copy进来,然后这里的my contract。等于WEB3点,ETh.contract a BI,对吧?把这个传进来,这里构建的是一个我们的JS里边的抽象的合约对象。那然后我们就要把它部署,部署的时候呢,最关键的又是这一步,对吧?其实大家看其实就是这两步,My contract抽象的对象和下面这个真正的对象实力,其实都是这两步,所以我们在这里的这一句呢,是把它全糅合在一起来写了,所以大家可能就看着好像有点绕,然后又觉得跟昨天我讲的不一样,那我们昨天拆开之后,这两部分别里边的参数是什么呢?麦contact抽象合约对象里边最关键参数就是abi,所以我们把abi提出来复制到这里传进去。
07:29
那我们的实际的这个实例合约,实例里边的关最关键的对象是什么呢?是一个交易对象,那交易对象里边别的都好说,最关键的就是这个bad code,所以我们又分了两步,分别把它又弄出来bad code还拼接了一下。然后传给这个,呃,Data,构造出这个交易对象,最后我们这个实例的里边的这个参数就是这个交易对象,所以大家可以记得我当时的步骤是这么五步对吧?所以这个会看起来好像步骤很多,其实核心就这么两步,就是一个是抽象的合约对象my contract。
08:08
一个是我们的交对象,对象实例contract instance。那大家注意,这里我们的这个定义其实就只是JS里边就把它的API传进去,我们就定义出来了,对吧,但是后边这一步呢,就不一样,我们是要发送交易的。就是contract.new这部的一定消息。好,这里就是又给大家把我们之前的这一部分又,呃,就是相当于是在再复习了一遍吧,因为当时确实课件上我没有把这几步写出来,所以大家会发现在操作的时候可能就是如果当时没有跟上,我一步一步做完。而且做完可能还不够,大家还得还得记住对吧,可能确实这个有点来不了,所以这里再给大家再再重复一下这个过程,其实没关系啊,就之后我们不是跟大家说还要去构建我们自动化的编译脚本,自动化的部署脚本,呃,这个就是大家还会再再去过一遍这个再给大家巩固一下这个过程的。
09:08
好,那我们大家基本上已经实现这个脚本了,对吧。啊,这是我们这个利用合约去发币的这个脚本,那大家可以看到刚才我们我再去查询的时候,其实还很麻烦,我想去验证它的时候,我要不停的到gas里面去,再假如我关了gas的话,重启的话,我又得重新去构建WEB3对象,然后去啊当然盖S里面不用构建WEB3对象啊,但是我得重新构建我的合约对象,对吧,就一次一次的这几步都得再去重新敲一遍,那大家可能就想到这个查询是不是也可以一个做一个脚本话。好,我们快速的再给大家多实现一个脚本啊。很简单,要查询的话,大家可能想到了,我处理这个合约的时候,是不是跟这个完全一样啊,我直接就可以copy过来了,这个就简单了,实现过就简单了。
10:01
我们已经敲过一次了嘛,那这里如果要去查询的话,那我可能不需要两个参数,呃,当然还是需要SLE2的啊,因为因为是从第二个开始截对吧,但是下面长度可能就是需要是一对吧,我们只要一个一个地址就可以了,那接下来呢,可能也就没有from to这么这么麻烦的事情了,我们直接就是把这个删掉,From可以删掉,我们直接就是一个address。就叫ad吧,把这个存下来,就是你要查谁的,对吧,那接下来交易对象我们照样还是得去创建,要不然我们又不知道怎么调用交易方法,那接下来怎么去查询呢?大家应该还记得我们这要用到我们自己内部合约内部的查询,对吧,不是查他是查我们的token,查我们的子代币,所以是balances,然后里边要查谁,我们串入谁就完了啊,当然这个里边大家可以去加上我们的回调,对吧,Error res。
11:17
回调的话呢,大家还是自己定义一下if,直接copy过来吧,这些东西都不重要的东西,我们直接copy。好,那大家可以看到,这样就是我们简单的又实现了一个脚本,那这个脚本的核心前面的前面这些东西我们都可以通用的,对吧?那这个脚本的核心其实就是最后这个balances,其实就是一个查询,但是我们前面要把这个合约都定义出来,我们如果要在gas里边,或者在load控制台去做这些查询的话,上面还得重新做一遍,所以很麻烦,我们干脆把它脚本化。那我这里就叫一个,呃,我可能在这里存了,那边又看不到啊,不过没关系,那我们先别在这存了,我们直接在这里边去给他新建好了。
12:12
我们去VI叫一个这个叫什么吧,我们叫get balance,对吧,这不叫get balance了,我们叫get amount吧,因为这是我们自己的get amount of定义一个这样的一个文件copy过来。好,那接下来大家可以看到我们已经,诶好有的是吧,右边看到的躲到这边来了,我们去查询一个。随便查询一个吧,我们把第一个账户传进来试试啊。
13:02
看它好使不好使,查询诶大家看直接返回了一个big number对吧,那这个大家如果觉得它这个不是特别的看着舒服的话,大家知道我们这里还可以再转换对不对,我们rise点点to string,我们把它转换一下就可以了。好保存再去查一下啊,大家可以看到209万对吧,就是大家如果知道这个方式之后,就可以看到我们对于简单问题能处理,那复杂问题其实也是一样的,就就一个一个去弄吧,呃,有了这些方法之后,这些都不难啊。
我来说两句