国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

以太坊智能合約開(kāi)發(fā)(五):Solidity成績(jī)錄入智能合約實(shí)驗(yàn)

這篇具有很好參考價(jià)值的文章主要介紹了以太坊智能合約開(kāi)發(fā)(五):Solidity成績(jī)錄入智能合約實(shí)驗(yàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


1 編寫(xiě)智能合約

每個(gè)學(xué)生分別部署合約Student.sol ,保證只有自己可以修改姓名。老師部署合約StudentScore.sol,用于錄入學(xué)生成績(jī),查詢(xún)學(xué)生信息。查詢(xún)學(xué)生信息時(shí),需要調(diào)用學(xué)生部署的合約Student.sol。
student.sol合約,用于學(xué)生對(duì)自己信息進(jìn)行管理。

  • 學(xué)生的基本信息作為狀態(tài)變量:
	pragma solidity ^0.4.0;
	contract Student{
	    string studentID;
	    string studentName;
	    address owner;
	}
  • 聲明構(gòu)造函數(shù),在構(gòu)造函數(shù)中將owner設(shè)置為調(diào)用者的address:
	constructor(string _studentID, string _stdentName) public{
		studentID = _studentID;
		studentName = _stdentName;
		owner = msg.sender;
	}
  • 聲明函數(shù)修飾器,可以將其加在函數(shù)中,在函數(shù)執(zhí)行前進(jìn)行判斷,來(lái)檢查調(diào)用者是否為學(xué)生本人,只有本人才能調(diào)用該函數(shù):
	modifier onlyOwner(){
    	require(msg.sender == owner,"only owner can call this function");
    	_;
	}
  • get和set方法,其中set方法加入了函數(shù)修飾器:
    function getStudentIDandName() public constant returns(string,string) {
    	return (studentID,studentName);
    }

    function setStudentIDandName(string _studentID,string _studentName) public onlyOwner {
    	studentID = _studentID;
    	studentName = _studentName;
    }

Teacher.sol合約,用于錄入、查詢(xún)學(xué)生成績(jī)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465875.html

  • 導(dǎo)入Student合約:
	pragma solidity ^0.4.11;
	import "./Student.sol";
  • 學(xué)生的相關(guān)成績(jī)作為狀態(tài)變量,totalScore為全班總成績(jī),studentCount全班學(xué)生數(shù)量,owner部署合約的賬戶(hù)地址。同時(shí)聲明映射studentAddrMap,studentScoreMap,將學(xué)生ID分別映射為學(xué)生地址和學(xué)生成績(jī)。事件studentNotExistsEvent用于存儲(chǔ)學(xué)生ID號(hào)
	contract StudentScore{
	    uint totalScore;
	    uint studentCount;
	    address owner;
	    mapping(string => address) studentAddrMap;
	    mapping(string => uint) studentScoreMap;
	    event studentNotExistsEvent(string studentID);
	}
  • 聲明自定義修飾符onlyOwner,只有老師地址才能執(zhí)行這些函數(shù)。
	modifier onlyOwner(){
        require(msg.sender == owner,"only owner can call this function");
        _;
    }
  • 函數(shù)addStudentScore,modifyScoreByStudentId分別用于老師添加或修改學(xué)生成績(jī):
    function addStudentScore(string studentID, address student, uint score) public onlyOwner {    
        studentAddrMap[studentID] = student;
        studentScoreMap[studentID] = score;
        totalScore += score;
        studentCount ++;
    }
    
    function modifyScoreByStudentId(string studentID, uint score) public onlyOwner{
        if(!studentExists(studentID)) {
            studentNotExistsEvent(studentID);
            return;
        }
        totalScore -= studentScoreMap[studentID];
        studentScoreMap[studentID] = score;
        totalScore += score; 
    }
  • 函數(shù)getAvgScore用于查詢(xún)?nèi)鄬W(xué)生平均成績(jī),函數(shù)studentExists用于判斷學(xué)生ID是否存在,函數(shù)getScoreByStudentID用于學(xué)生查詢(xún)自己的成績(jī)。
    function getAvgScore() public view returns(uint){    
        return totalScore / studentCount;
    }
    function studentExists(string studentID) public view returns(bool){
        address student = Student(studentAddrMap[studentID]);
        if(student == 0x00){
            return false;
        }else{
            return true;
        }
    }
    function getScoreByStudentID(string studentID) public constant returns(string, string, uint){
        if(!studentExists(studentID)) {
            studentNotExistsEvent(studentID);
            return;
        }
        Student student = Student(studentAddrMap[studentID]);
        var studentName = student.getStudentName();
        uint score = studentScoreMap[studentID];
        return(studentID, studentName, score);
    }

到了這里,關(guān)于以太坊智能合約開(kāi)發(fā)(五):Solidity成績(jī)錄入智能合約實(shí)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于以太坊的智能合約開(kāi)發(fā)Solidity(事件&日志篇)

    基于以太坊的智能合約開(kāi)發(fā)Solidity(事件&日志篇)

    (1)事件用于記錄在區(qū)塊鏈上的特定活動(dòng),“emit ValueChanged(newValue);”語(yǔ)句的作用是觸發(fā)ValueChanged事件(首先需要聲明事件)。 ①觸發(fā)事件后會(huì)生成相應(yīng)日志,上圖黃框就是“emit ValueChanged(newValue);”語(yǔ)句產(chǎn)生的日志,其中“form”指的是觸發(fā)事件的合約賬戶(hù)。 ②事件主要是供

    2024年02月04日
    瀏覽(28)
  • 以太坊智能合約開(kāi)發(fā):Solidity 語(yǔ)言中的數(shù)據(jù)類(lèi)型

    以太坊智能合約開(kāi)發(fā):Solidity 語(yǔ)言中的數(shù)據(jù)類(lèi)型

    本文我們介紹Solidity語(yǔ)言的數(shù)據(jù)類(lèi)型,重點(diǎn)是值類(lèi)型,包括布爾類(lèi)型、整型、地址類(lèi)型、字節(jié)類(lèi)型、字符串類(lèi)型和枚舉類(lèi)型。并且通過(guò)兩個(gè)智能合約例子,用于演示這些數(shù)據(jù)類(lèi)型的聲明與使用方法。 訪(fǎng)問(wèn) Github 倉(cāng)庫(kù) 獲取更多資料。 Solidity中關(guān)于數(shù)據(jù)類(lèi)型的定義如下: Solidity是

    2024年02月02日
    瀏覽(31)
  • 基于以太坊的智能合約開(kāi)發(fā)Solidity(內(nèi)存&結(jié)構(gòu)體篇)

    參考教程:【內(nèi)存、引用與持久化存儲(chǔ)】1、內(nèi)存與區(qū)塊鏈——storage與memory原理_嗶哩嗶哩_bilibili (1)所有的復(fù)雜類(lèi)型,即數(shù)組、結(jié)構(gòu)和映射類(lèi)型,都有一個(gè)額外屬性——“數(shù)據(jù)位置”,用來(lái)說(shuō)明數(shù)據(jù)是保存在內(nèi)存memory中還是存儲(chǔ)storage中,保存在memory中的數(shù)據(jù),在函數(shù)執(zhí)行完

    2024年02月04日
    瀏覽(23)
  • 以太坊智能合約語(yǔ)言Solidity - 3 數(shù)組

    1字節(jié)(Byte) = 8位 (bit), bytes32 = 256位,bytes1 實(shí)質(zhì)上就等于 int8 固定長(zhǎng)度的數(shù)組一旦被定義就無(wú)法再更改,并且長(zhǎng)度在一開(kāi)始就會(huì)被顯式定義 我們?cè)賮?lái)創(chuàng)建一個(gè)新的文件用來(lái)編寫(xiě)代碼 字節(jié)數(shù)組無(wú)法進(jìn)行基本運(yùn)算,但是可以比較 字節(jié)數(shù)組還支持其他一些邏輯運(yùn)算,具體計(jì)算結(jié)果

    2023年04月08日
    瀏覽(25)
  • 第四章 以太坊智能合約solidity介紹

    Solidity 是一門(mén)面向合約的、為實(shí)現(xiàn)智能合約而創(chuàng)建的高級(jí)編程語(yǔ)言,設(shè)計(jì)的目的是能在以太坊虛擬機(jī)上運(yùn)行。 本章大概介紹合約的基本信息,合約的組成,語(yǔ)法方面不做過(guò)多的介紹,個(gè)人建議多閱讀官方文檔效果更佳,后續(xù)的章節(jié)會(huì)開(kāi)發(fā)ERC20代幣合約案例以便于更好的學(xué)習(xí)智

    2024年02月06日
    瀏覽(26)
  • 玩以太坊鏈上項(xiàng)目的必備技能(初識(shí)智能合約語(yǔ)言-Solidity之旅一)

    玩以太坊鏈上項(xiàng)目的必備技能(初識(shí)智能合約語(yǔ)言-Solidity之旅一)

    前面一篇關(guān)于 智能合約 翻譯文講到了,是一種計(jì)算機(jī)程序,既然是程序,那就可以使用 程序語(yǔ)言 去編寫(xiě) 智能合約 了。 而若想玩區(qū)塊鏈上的項(xiàng)目,大部分區(qū)塊鏈項(xiàng)目都是開(kāi)源的,能看得懂 智能合約 代碼,或找出其中的漏洞,那么,學(xué)習(xí) Solidity 這門(mén)高級(jí)的智能合約語(yǔ)言是有

    2023年04月16日
    瀏覽(27)
  • Solidity智能合約開(kāi)發(fā) — 3.4-抽象智能合約和接口

    假如一個(gè)智能合約中至少一個(gè)函數(shù)缺省實(shí)現(xiàn)時(shí),即某個(gè)函數(shù)缺少{}中的內(nèi)容,這個(gè)智能合約就當(dāng)做抽象智能合約。 當(dāng)我們有一個(gè)函數(shù)沒(méi)想好怎么寫(xiě)時(shí),必須將該合約標(biāo)為 abstract ,不然編譯會(huì)報(bào)錯(cuò);另外,未實(shí)現(xiàn)的函數(shù)需要加 virtual ,以便子合約重寫(xiě)。抽象智能合約是將智能合

    2024年02月12日
    瀏覽(26)
  • solidity開(kāi)發(fā)智能合約

    solidity開(kāi)發(fā)智能合約

    起源于以太坊(Ethereum),設(shè)計(jì)的目的是能在以太坊虛擬機(jī)(EVM)上運(yùn)行。Solidity 是一門(mén)面向合約的、為實(shí)現(xiàn)智能合約而創(chuàng)建的高級(jí)編程語(yǔ)言。所以先從智能合約開(kāi)始。 參考文檔 Solidity文檔:區(qū)塊鏈技術(shù)-智能合約Solidity編程語(yǔ)言 solidity官方文檔: https://solidity-cn.readthedocs.io/

    2023年04月08日
    瀏覽(25)
  • 區(qū)塊鏈2——Solidity智能合約開(kāi)發(fā)

    區(qū)塊鏈 索引目錄 智能合約是一種以代碼形式編寫(xiě)的自動(dòng)執(zhí)行合約,它們運(yùn)行在區(qū)塊鏈上。這些合約定義了在特定條件下發(fā)生的事件以及相應(yīng)的行為。 1.1 智能合約結(jié)構(gòu) 版本聲明(Version Declaration): 智能合約通常以聲明版本開(kāi)始,指定合約應(yīng)該使用的Solidity編譯器版本。例如

    2024年02月05日
    瀏覽(29)
  • Solidity智能合約開(kāi)發(fā) — 3.2-合約的fallback和函數(shù)重載

    每個(gè)智能合約有且僅有一個(gè)未命名的函數(shù),稱(chēng)為fallback函數(shù),沒(méi)有參數(shù)且沒(méi)有返回值,可見(jiàn)性必須是 external,且可以是 virtual的(即可以被重載),也可以有修改器 modifier。 fallback執(zhí)行條件: 如果在一個(gè)合約的調(diào)用中,沒(méi)有其他函數(shù)與給定的函數(shù)標(biāo)識(shí)符匹配時(shí)(或沒(méi)有提供調(diào)用

    2024年02月09日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包