260-cryptozombies全攻略八










cryptozombies全攻略八








第四章.调用和合约函数
web3.js有2个方法来调用合约的函数
1.call
2.send


call
call用来调用view函数和pure函数
值运行在本地节点
不会在区块链上创建事务

send
send将创建一个事务并改变区块链上的数据
用send来调用非view或pure的函数

myContract.methods.myMethod(123).call()
myContract.methods.myMethod(123).send()


之前,我们定义了
Zombie[] public zombies;
这是一个公开的僵尸数组
在solidity中,当定义了一个public变量的时候
它将自动定义一个公开的getter同名方法
所以如果要查看一个id为15的僵尸
可以这样
zombies(15)


代码
function getZombieDetails(id){
	return cryptoZombies.methods.zombies(id).call()
}

//调用函数
getZombieDetail(15)
.then(function(result){
	console.log('Zombie 15: ', JSON.stringify(result))
})


这里的
cryptoZombies.methods.zombies(id).call()
会和web3提供者节点进行通信
告诉它返回id为15的僵尸信息

然后我们把三个方法都写出来
都是相同的道理
用cryptoZombies对象的methods
然后直接调用对应的方法,调用call()
      function getZombieDetails(id) {
        return cryptoZombies.methods.zombies(id).call()
      }

      function zombieToOwner(id) {
        return cryptoZombies.methods.zombieToOwner(id).call()
      }

      function getZombiesByOwner(owner) {
        return cryptoZombies.methods.getZombiesByOwner(owner).call()
      }










第五章.MetaMask和账户
MetaMask允许用户在扩展中管理多个账户
我们可以这样来获取web3变量中激活的当前账户
var userAccount = web3.eth.accounts[0]

因为用户可以随时在MetaMask中切换账户
我们的应用需要去监控这个变量
一旦改变了就需要去更新界面

我们可以写一个setInterval方法
var accountInterval = setInterval(function(){

//检查账户是否切换
if( web3.eth.accounts[0] !== userAccount){
	userAccount = web3.eth.accounts[0];
	//调用一些方法来更新界面
	updateInterface();
}

},100);

这段代码的意思是
每100毫秒就检查一次userAccount
是否还等于web3.eth.accounts[0]
如果不等,那么就将当前激活用户
赋值给userAccount
然后更新界面











第六章.显示
function displayZombies(ids) {
        $("#zombies").empty();
        for (id of ids) {
          // Look up zombie details from our contract. Returns a `zombie` object
          getZombieDetails(id)
          .then(function(zombie) {
            // Using ES6's "template literals" to inject variables into the HTML.
            // Append each one to our #zombies div
            $("#zombies").append(`<div class="zombie">
              <ul>
                <li>Name: ${zombie.name}</li>
                <li>DNA: ${zombie.dna}</li>
                <li>Level: ${zombie.level}</li>
                <li>Wins: ${zombie.winCount}</li>
                <li>Losses: ${zombie.lossCount}</li>
                <li>Ready Time: ${zombie.readyTime}</li>
              </ul>
            </div>`);
          });
        }
      }










第七章.发送事务
send
1.send一个事务需要一个from地址
来表明谁在调用这个函数
2.send一个事务需要花费gas
3.在用户send一个事务到该事务对区块链产生影响之间有一个不可忽略的延迟

生成僵尸
createRandomZombie
function createRandomZombie(string _name) public{
	require(ownerZombieCount[msg.sender]=0);
	uint randDna = _generateRandomDna(_name);
	randDna = randDna - randDna % 100;
	_createZombie(_name, randDna);
}







 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值