请注意,本文编写于 1363 天前,最后修改于 1184 天前,其中某些信息可能已经过时。
啊这!今天已经是和鼎哥失联的第四天了。难受,确实应该是我自己的问题,所有小伙伴的的Github pages都无法访问了。今天研究了一下午,我都没有找到解决方法。真的奇怪,我在Windows下使用cmd,ping鼎哥直接超时。但是在Linux使用ping鼎哥博客的时候是可以ping通的。现在我收是可以访问GitHub的(挂梯子和不挂梯子都可以),但是就是不能访问博客。明天抽空问一下师傅们吧!
今天主要是学习了Solidity的编程开发,总体给我的感觉就是与C++很像,感觉功能还要强大一点。对于本书对该语言的高级安全防护,主要是一些代码上的规范手段。比如:自动获取的地址,个函数的私用公有继承问题。
第一部分:
pragma solidity ^0.4.20;
contract ZombieFactory{
event NewZombie(uint zombeiID,string name, uint dna);
uint dnaDigits = 16;
uint dnaModulus= 10**dnaDigits;
struct Zombie{
string name;
uint dna;
}
Zombie[] public zombies;
mapping(uint=>address) public zombieToOwner;
mapping(address=>uint) ownerZombieCount;
function _createZombie(string_name,uint_dna) internal{
Zombie z=Zombie(_name,_dna);
uint id =zombies.push(z)-1;
zombieToOwner[id]=msg.sender;
ownerZombieCount[msg.sender]++;
NewZombie(id,_name,_dna);
}
function _generateRandomDna(string_str) private view returns(uint){
uint rand=uint(keccak256(_str));
return rang%dnaModulus;
}
function createRandomZombie(string_name) public{
require(ownerZombieCount[msg.sender]==0);
uint randDna = _generateRandomDna(_name);
_createZombie(_name,randDna);
}
}
第二部分:
pragma solidity ^0.4.20;
import "./zombiefactory.sol";
contract KittyInterface{
function getkitty(uint256 _id) external view returns(
bool isGestating,
bool isReady,
uint256 cooldownIndex,
uint256 nextActionAt,
uint256 siringWithId,
uint256 birthTime,
uint256 matronId,
uint256 sireId,
uint256 generation,
uint256 genes);
}
contract zombieFeeding is ZombieFactory{
address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
KittyInterface kittyContract =KittyInterface(ckAddress);
function feedAndMultiply(uint _zombieId, uint _targetDna) public{
require(msg.sender == zombietoOwner[_zombieId]);
Zombie storage myZombie = zombies[_zombieId];
_targetDna =_targetDna%dnaModulus;
uint newDna =(myZombie.Dna+_targetDna)/2;
if(keccak256(_species)==keccak256("kitty")){
newDna = newDna -newDna%100 + 99;
}
_createZombie("NoName",newDna);
}
function feedOnkitty(uint _zombieId, uint _kittyId) public{
uint kitttDna;
(,,,,,,,,,kitttDna)=kittyContract.getkitty(_kittyId);
feedAndMultiply(_zombieId,kitttDna);
}
}
本章主要记录一下合约代码,具体的语法还是要自己学习的。今天为止应该是完成了合约开发的所有内容了,明天就应该可以进入合约安全分析了。虽然语言掌握的不熟练,在之后的学习中应该会和汇编语言一样,慢慢好起来的。
全部评论 (共 1 条评论)