寫在前面
- 環(huán)境:atom
- 需要的插件:
autocomplete-solidity 代碼自動(dòng)補(bǔ)全
linter-solium、linter-solidity 代碼錯(cuò)誤檢查
language-ethereum 支持solidity代碼高亮以及solidity代碼片段
一孔祸、solidity類的編寫
pragma solidity^0.4.4;
/*
pragma:版本生命
0.4.4:當(dāng)前合約版本,.4代表修復(fù)bug的升級(jí)版
^:向上兼容
*/
contract person {
uint _height;// 屬性名加下劃線
uint _age;
//address是一個(gè)160位數(shù)字
address _owner; //合約的擁有者
//方法名和合約名相同時(shí)就屬于構(gòu)造函數(shù)屏富,在創(chuàng)建對(duì)象時(shí),構(gòu)造函數(shù)會(huì)自動(dòng)最先被調(diào)用
// 默認(rèn)構(gòu)造身高為180养叛,年齡為29的對(duì)象
function person(){
_height = 180;
_age = 29;
_owner = msg.sender;
}
function owner() constant returns (address){
return _owner;
}
// 修改屬性
function setHeight(uint height){
_height = height;
}
//其實(shí)就是get方法种呐,查看or讀取_height屬性
// 【注意】constant 代表這個(gè)方法只讀,如果不加的話弃甥,調(diào)用它就要加.call,且需要加return類型
function height() constant returns(uint){
return _height;
}
function setAge(uint age){
_age= age;
}
function age() constant returns(uint){
return _age;
}
//selfdestruct 是析構(gòu)函數(shù)
function kill(){
//【注意】msg 是個(gè)全局變量爽室,
if(_owner == msg.sender){
selfdestruct(_owner);
}
}
}
注意
- msg.sender 是用于部署合約的錢包地址
- address 是合約地址
- 理論上每次創(chuàng)建合約對(duì)象時(shí),都會(huì)生成不同的合約地址淆攻,但是在remix上用同一個(gè)錢包賬戶創(chuàng)建阔墩,同一個(gè)代碼的合約嘿架,由于bytecode一樣,只會(huì)生成一樣的合約地址(節(jié)省區(qū)塊空間)
二啸箫、屬性的訪問(wèn)權(quán)限
// public > internal(默認(rèn)訪問(wèn)權(quán)限) > private
// public 會(huì)自動(dòng)生成一個(gè)和屬性名相同且返回值就是當(dāng)前屬性的get函數(shù)耸彪。
// 如若為public屬性再寫一個(gè)get函數(shù),則覆蓋默認(rèn)的get函數(shù)
三筐高、方法的訪問(wèn)權(quán)限
// 合約中的函數(shù)搜囱,默認(rèn)為public類型
contract person {
function age() constant returns (uint){
return 55;
}
function height() constant returns (uint) {
return 172;
}
function money() constant returns (uint) {
return 320000;
}
}
-
在remix中均可被訪問(wèn)
remix編譯
// 若改為private或internal
contract person {
function age() constant returns (uint){
return 55;
}
function height() constant internal returns (uint) {
return 172;
}
function money() constant private returns (uint) {
return 320000;
}
}
- 則remix不能訪問(wèn)private與internal 的方法
屬性默認(rèn)權(quán)限為internal, 只有public類型的屬性才可能供外部訪問(wèn),internal 和 private 類型的屬性只能在合約內(nèi)部使用柑土。
函數(shù)的權(quán)限默認(rèn)是public類型蜀肘,public類型的函數(shù)可供外部訪問(wèn),而internal和privtate的函數(shù)不能通過(guò)指針進(jìn)行訪問(wèn)稽屏,哪怕是在內(nèi)部通過(guò)this訪問(wèn)扮宠,都會(huì)報(bào)錯(cuò)。在合約內(nèi)部訪問(wèn)狐榔,我們可以直接訪問(wèn)函數(shù)就可以了坛增。
備注 不管是屬性還是方法,只有是public類型時(shí)薄腻,才可以通過(guò)合約地址進(jìn)行訪問(wèn)收捣。合約內(nèi)部的this就是當(dāng)前合約的地址。在合約內(nèi)部如果要訪問(wèn)internal和private類型的屬性庵楷,或者是函數(shù)直接訪問(wèn)即可罢艾,不要試圖通過(guò)this去訪問(wèn)