web3-以太坊智能合約基礎(理解智能合約Solidity)

以太坊智能合約基礎(理解智能合約/Solidity)

無需編程經驗,也可以幫助你了解Solidity獨特的部分;如果本身就有相應的編程經驗如java,python等那么學起來也會非常的輕松

一、Solidity和EVM字節碼

實際上以太坊鏈上儲存的就是EVM的字節碼,編譯好的程序;EVM和Solidity實際上就和java中的jvm虛擬機和java語言的關系
在這里插入圖片描述

Solidity是靜態類型的

? 類似于Java,C,Rust 而非python或者js

例子:-整數:uint(256位無符號整數)

? int(256位帶符號整數)

for (uint i = 0;i<10;i++){users[i].balance = 1;}

二、數據類型

**值類型(value Type)**布爾值,整數型等等

**引用類型(Reference Type)**包括數組和結構體,這類變量占用的空間大,賦值是直接傳遞地址值(類似于Java的指針)

**映射類型 (mapping Type) ** 類似于java的map key–value

-映射:健值存儲/哈希表

-每個鍵初始值都映射為0

-沒有內置的方法來查詢映射的長度,或者、迭代其非零元素。可以使用單獨的變量
在這里插入圖片描述

三、函數簽名

智能合約的代碼總是包含在函數或者是一個運算程序中的;和Java,python的編程語言的函數類似
在這里插入圖片描述
構造函數

第一次創建合約時調用

用于自定義設置或給出初始狀態

BoardAction的智能合約函數,類似于java中的賦值操作,把constructor的address的地址值賦值給上面的public的值

contract BoardAction{address public president;address public vicePresident;constructor(address initialPresident,address initialVP) public {/** initialize the contract **/president = initialPresident;vicePresident = initialVP;}
}
四、可見修飾器

用于函數

function calledByAnyone()public {/*anyone can all */}
function calledInternally() internal {/* only called by another funcation in this contract*/}

用于實例變量;幾乎和java的public和private一摸一樣

int public myPublicField;
int private myPrivateField;

問:myPrivateField所取的值時秘密的嗎?

剛開始學習 solidity 時,pureview 關鍵字可能令人費解,因為其他編程語言中沒有類似的關鍵字。solidity 引入這兩個關鍵字主要是因為 以太坊交易需要支付氣費(gas fee)。合約的狀態變量存儲在鏈上,gas fee 很貴,如果計算不改變鏈上狀態,就可以不用付 gas。包含 pureview 關鍵字的函數是不改寫鏈上狀態的,因此用戶直接調用它們是不需要付 gas 的(注意,合約中非 pure/view 函數調用 pure/view 函數時需要付gas)。

function ordinary() public {/*can modify state and call other functions*/}
function viewOnly() public view {/*cannot modify any storage or call another ono-view funcation*/}
funcation localOnly() public pure {/*doesnot even read any state either*/}
五、事件

這個類似于java中日志

查看合約狀態主要有兩種方式:

-使用***View函數***,例如用于公共字段的getter函數

-查看***事件日志***。是否可以“訂閱”合約中的事件

首先使用event聲明一個事件,然后在想要查看的地方emit這個事件即可
在這里插入圖片描述

六、調用其他合約的方法

如下代碼所示Token為外部的合約接口;tokenA,tokenB外部合約地址實例;sqap1函數的調用

abstract contract Token {function transferFrom (address from,address to,uint amount) public virtual;
}
contract Exchanger {Token tokenA = Token(address(0x00))Token tokenB = Token(address(0x00))function sqap1(address Alice,address Bob) public{tokenA.transferFrom(Alice,Bob,1);tokenB.transferFrom(Bob,Alice,1);}
}
七、使用原生代幣

在solidity中接受和使用以太坊幣

如下代碼。有一個acceptExactlyTwoEther函數可以被以太坊的以太幣接受,然后還有函數修飾器payable 一定要指定payable ,如果沒有指定payable修飾的話那么以太坊將會拒絕所有的以太幣。

function acceptExactlyTwoEther() public payable returns(uint) {require(msg.value >= 2.0 ether);uint refund = msg.value - 2.0 ether;payable(msg.sender).transfer(refund);return address(this).balance;
}

讀取當前時間

function plcaeBid(int price) public {require(block.timestamp <= deadline);
}

關于區塊的其他元數據也是可以得到的

總結

本文介紹了Solidity智能合約的基本概念和核心特性。Solidity類似于Java/C等靜態語言,編譯為EVM字節碼運行。主要知識點包括:1)數據類型分為值類型、引用類型和映射類型;2)函數簽名與構造函數機制;3)可見性修飾符(public/private)和狀態修改標識(view/pure);4)事件機制用于日志記錄;5)調用外部合約的方法;6)原生代幣處理需使用payable修飾符;7)可讀取區塊時間等元數據。文章通過類比Java等傳統語言,幫助開發者快速理解Solidity獨特的設計邏輯,為智能合約開發打下基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83742.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

D2-基于本地Ollama模型的多輪問答系統

本程序是一個基于 Gradio 和 Ollama API 構建的支持多輪對話的寫作助手。相較于上一版本&#xff0c;本版本新增了對話歷史記錄、Token 計數、參數調節和清空對話功能&#xff0c;顯著提升了用戶體驗和交互靈活性。 程序通過抽象基類 LLMAgent 實現模塊化設計&#xff0c;當前…

傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(2)--選定Python環境 安裝rasa并初始化工程

此篇接續上一篇 傳統業務對接AI-AI編程框架-Rasa的業務應用實戰&#xff08;1&#xff09;--項目背景即學習初衷 1、Python 環境版本的選擇 我主機上默認的Python環境是3.12.3 &#xff08;我喜歡保持使用最新版本的工具或框架&#xff0c;當初裝python時最新的穩定版本就是…

Ubuntu22.04安裝MinkowskiEngine

MinkowskiEngine簡介 Minkowski引擎是一個用于稀疏張量的自動微分庫。它支持所有標準神經網絡層&#xff0c;例如對稀疏張量的卷積、池化和廣播操作。 MinkowskiEngine安裝 官方源碼鏈接&#xff1a;GitHub - NVIDIA/MinkowskiEngine: Minkowski Engine is an auto-diff neu…

高等數學基礎(矩陣基本操作轉置和逆矩陣)

矩陣是否相等 若 A A A和 B B B為同型矩陣且對應位置的各個元素相同, 則稱矩陣 A A A和 B B B相等 在Numpy中, 可以根據np.allclose()來判斷 import numpy as npA np.random.rand(4, 4) # 生成一個隨機 n x n 矩陣B A A.Tprint("矩陣是否相等&#xff1a;", np…

網絡爬蟲一課一得

網頁爬蟲&#xff08;Web Crawler&#xff09;是一種自動化程序&#xff0c;通過模擬人類瀏覽行為&#xff0c;從互聯網上抓取、解析和存儲網頁數據。其核心作用是高效獲取并結構化網絡信息&#xff0c;為后續分析和應用提供數據基礎。以下是其詳細作用和用途方向&#xff1a; …

MATLAB實現井字棋

一、智能決策系統與博弈游戲概述 &#xff08;一&#xff09;智能決策系統核心概念 智能決策系統&#xff08;Intelligent Decision System, IDS&#xff09;是通過數據驅動和算法模型模擬人類決策過程的計算機系統&#xff0c;核心目標是在復雜環境中自動生成最優策略&#…

解決el-select選擇框右側下拉箭頭遮擋文字問題

如圖所示&#xff1a; el-select長度較短的時候&#xff0c;選擇框右側下拉箭頭會遮擋選中的數據 選中數據被遮擋 解決辦法&#xff1a; 組件如下&#xff1a; <td class"fmtd" :colspan"col.ptproCupNum" v-for"col in row" :key"…

【Linux】pthread多線程同步

參考文章&#xff1a;https://blog.csdn.net/Alkaid2000/article/details/128121066 一、線程同步 線程的主要優勢在于&#xff0c;能夠通過全局變量來共享信息。不過&#xff0c;這種便攜的共享是有代價的&#xff1b;必須確保多個線程不會同時修改同一變量&#xff0c;或者某…

Spring框架學習day7--SpringWeb學習(概念與搭建配置)

SpringWeb1.SpringWeb特點2.SpringWeb運行流程3.SpringWeb組件4.搭建項目結構圖&#xff1a;4.1導入jar包4.2在Web.xml配置**4.2.1配置統一攔截分發器 DispatcherServlet**4.2.2開啟SpringWeb注解&#xff08;spring.xml&#xff09; 5.處理類的搭建6.SpringWeb請求流程(自己理…

業務到解決方案構想

解決方案構想的核心理解 解決方案構想是連接業務需求與技術實現的關鍵橋梁&#xff0c;從您描述的內容和我的理解&#xff0c;這個階段的核心點包括&#xff1a; 核心要點解讀 轉化視角&#xff1a;將業務視角的需求轉變為解決方案視角 業務能力探索階段識別了"做什么&q…

jvm學習第1day jvm簡介,棧溢出、堆溢出

jvm學習第1day jvm簡介&#xff0c;棧溢出、堆溢出 jvm簡介棧線程安全棧溢出線程運行診斷堆堆溢出 方法區方法區內存溢出常量池和運行時常量池 jvm簡介 jvm 是編譯后的字節碼文件運行的環境&#xff0c; 因此各個平臺有了jvm可以運行java.class文件&#xff0c;這是Java跨平臺…

關于神經網絡中的激活函數

這篇博客主要介紹一下神經網絡中的激活函數以及為什么要存在激活函數。 首先&#xff0c;我先做一個簡單的類比&#xff1a;激活函數的作用就像給神經網絡里的 “數字信號” 加了一個 “智能閥門”&#xff0c;讓機器能學會像人類一樣思考復雜問題。 沒有激活i函數的神經網絡…

免費無限使用GPT Plus、Claude Pro、Grok Super、Deepseek滿血版

滲透智能-ShirtAI&#xff0c;可以免費無限使用GPT Plus、Claude Pro、Grok Super、Deepseek滿血版、除此之外還能免費使用AI搜索、Gemini AI、AI照片修復、AI橡皮擦、AI去背景、AI智能摳圖、AI證件照、OCR識別、在線思維導圖、在線繪圖工具、PDF工具箱、PDF翻譯。 傳送入口&a…

阿里云 Linux 搭建郵件系統全流程及常見問題解決

阿里云 Linux 搭建 [conkl.com]郵件系統全流程及常見問題解決 目錄 阿里云 Linux 搭建 [conkl.com]郵件系統全流程及常見問題解決一、前期準備&#xff08;關鍵配置需重點檢查&#xff09;1.1 服務器與域名準備1.2 系統初始化&#xff08;必做操作&#xff09; 二、核心組件安裝…

python版若依框架開發:項目結構解析

python版若依框架開發 從0起步&#xff0c;揚帆起航。 python版若依部署代碼生成指南&#xff0c;迅速落地CURD&#xff01;項目結構解析 文章目錄 python版若依框架開發前端后端 前端 后端

RabbitMQ 的異步化、解耦和流量削峰三大核心機制

RabbitMQ 的異步化、解耦和流量削峰三大核心機制 RabbitMQ 是解決數據庫高并發問題的利器&#xff0c;通過異步化、解耦和流量削峰三大核心機制保護數據庫。下面從設計思想到具體實現&#xff0c;深入剖析 RabbitMQ 應對高并發的完整方案&#xff1a; 一、數據庫高并發核心痛點…

前端沒有“秦始皇“,但可以做跨端的王[特殊字符]

前端各領域的 “百家爭鳴” 框架之爭&#xff1a;有 React、Vue、Angular 等多種框架。它們各有優缺點&#xff0c;開發者之間還存在鄙視鏈&#xff0c;比如 Vue 嫌 React 難用&#xff0c;React 嫌 Vue 不夠靈活。樣式處理&#xff1a; CSS 預處理器&#xff1a;像 Sass、Les…

Spring Boot-面試題(52)

摘要&#xff1a; 1、通俗易懂&#xff0c;適合小白 2、僅做面試復習用&#xff0c;部分來源網絡&#xff0c;博文免費&#xff0c;知識無價&#xff0c;侵權請聯系&#xff01; 1. 什么是 Spring Boot 框架&#xff1f; Spring Boot 是基于 Spring 框架的快速開發框架&#…

JVM——JVM中的字節碼:解碼Java跨平臺的核心引擎

引入 在Java的技術版圖中&#xff0c;字節碼&#xff08;Bytecode&#xff09;是連接源代碼與機器世界的黃金橋梁。當開發者寫下第一行public class HelloWorld時&#xff0c;編譯器便開始了一場精密的翻譯工程——將人類可讀的Java代碼轉化為JVM能夠理解的字節碼指令。這些由…

Java中的JSONObject詳解:從基礎到高級應用

Java中的JSONObject詳解&#xff1a;從基礎到高級應用 在當今前后端分離的架構中&#xff0c;JSONObject已成為Java開發者處理JSON數據的瑞士軍刀。本文將深入解析JSONObject的核心機制與實戰技巧。 一、JSONObject的本質與實現庫 1.1 核心定位 JSONObject是Java中表示JSON對…