前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >meta force原力元宇宙系统开发源代码部署流程

meta force原力元宇宙系统开发源代码部署流程

原创
作者头像
用户开发vx_hkkf5566
发布2022-11-24 16:57:52
5950
发布2022-11-24 16:57:52
举报

Force 与之前的项目 Forsage 的主要区别在于,新平台上的交互是预先铺设的,因此,Meta Force 中出现的所有新内容都将是单个系统的组成部分。虽然在以前的项目中,它和其他人一样,但当第一个智能合约没有考虑到新程序时,与 Meta Force 中的程序不同,这个基础是提前准备的。

S6matrix。这是 Metaforce 中的第二个模型,称为中的第二个模型,S6 矩阵。S6 矩阵怎么样,也就是下面的?它有六个要点。第一排的两点在哪里?也就是说,每次进来的资金上涨,你不拿,但是在二线。你的钱是第一,第二,第三个位置是 100%,然后是 100%或者 100%。第二行的最后一个位置叫循环位。不管是在哪里 S3 矩阵还是 S 在 6 矩阵中,所有循环 BT 都有相同的含义。

循环位的作用是清空和重置你的矩阵,因为只有在仓位清空后,你才能享受到入境资金的利润。你能理解你的合作伙伴吗?S 在 6 矩阵中,循环位是第二行的第二位或第四位,所以这取决于哪个位置先来,然后循环位会帮助你重新投资,然后位置会改变。简单地说,在 S 在 6 矩阵中,以下六点可能来自你的上级,你的上级或上级的下属,或你的左朋友,或你的右朋友,或你的下属朋友,360 度。

S6 矩阵的第一排有两个位置,也就是说会给你的上级。然后,倒数四个位置中有三个位置,你得到了 100%。其中一个是帮助你重置矩阵的圆形位置。所以在这里,很多合作伙伴不知道的是,第一排的两个位置必须给你的上级。答案是,这是你上级的第二排。也许是给你的上级,直接拿了 100%。也许他是一个圆,然后重置整个点。S 矩阵可享受全球公共行。

一、编写合约合约示例,一个简单的做加法的合约

代码语言:javascript
复制
pragma solidity ^0.4.7;contract addcontract {
function add(uint a,uint b) returns(uint d) {              return a + b;}

二、编译合约通过 remix 编译可以获得 abi 与 data 如下:

代码语言:javascript
复制
abi =[{“constant”:false,“inputs”:[{“name”:“a”,“type”:“uint256”},
{“name”:“b”,“type”:“uint256”}],“name”:“add”,“outputs”:[{“name”:“d”,“type”:“uint256”}],
“payable”:false,“stateMutability”:“nonpayable”,“type”:“function”}]
data=“0x6080604052348015600f57600080fd5b50609d8061001e600039600
0f300608060405260043610603e5763ffffffff7c01
000000000000000000000000000000000000000000000000000000006000
35041663771602f781146043575b600080fd5b348015604e57600080fd5b
50605b600435602435606d565b60408051918252519081900360200190f3
5b01905600a165627a7a72305820f6266436f5e17e3985b58d99a115b831
979da26bec9abec3f8db4082fe369fa10029”

三、部署合约

代码语言:javascript
复制
addContract = hpb.contract(abi)addcontract = addContract.new({from:hpb.coinbase,data:data,gas:4700000}) ,
返回交易 
hash:“0x7a9e50ee550d909f9d8fbdc849dc2bddcdd2485ffafb5eeb52c1ebbff68d1802”

至此,可以在 txpool 中看到有一条交易,挖矿打包后,合约部署成功可通过 addcontract.address 查看合约地址,也可通过交易 hash 查看:hpb.getTransactionReceipt(“0x7a9e50ee550d909f9d8fbdc849dc2bddcdd2485ffafb5eeb52c1ebbff68d1802”)

4、调用合约合约部署完毕,调用合约

代码语言:javascript
复制
myContract = addContract.at(addcontract.address) // 
或者这里直接使用地址 myContract.add.sendTransaction(1,2,{from:hpb.coinbase}) //
返回交易 hash :“0x4298e32d61c4a2447d862295cefdef0bc89490df65dff06f20a57c1962d7d84e”

此时可以看到 txpool 中有一条交易。另外也可以通过 myContract.add.call(1,2)来直接调用合约,但不产生交易,而是直接返回结果 3。

五、代码分析那么问题就来了,通过 sendTransaction 接口发送的交易并没有返回结果,那能找到该交易产生的结果吗?下面从代码角度看一下通过 sendTransaction 接口执行的 1+2 后的结果在哪里。直接看合约 call 的部分代码 evm.go 中的 call

1、先判余额是否是否满足本次转账要求,满足的话先进行转账,根据 input 然后执行合约 run

2、在 run 中,重点在 for 循环中,先通过 op = contract.GetOp(pc) 获取操作码,操作码及其对应函数的定义在 jump_table.go 中

3、然后通过 operation := in.cfg.JumpTable[op]获取对应的操作函数,并进行 stack 的校验

4、然后 res, err := operation.execute(&pc, in.evm, contract, mem, stack) 获取操作的返回结果,res 存储了返回结果

5、如果当前操作的 operation.returns 是 true 则将 res 存储到 in.returnData 中。

6、没有错误的情况继续下一个操作,转到第 2 步

通过上面的代码运行可以,返回的结果在 res 中,而这个结果在交易中是不进行保存的。所以通过 sendTransaction 发起的交易是无法查询结果的。因此在实际应用中,通常是使用 sendTransaction 去设置变量的值并打包进区块中,然后通过 call 来调用进行相应变量的数据处理并返回结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档