如何使用Hyperledger Fabic实现Token代币
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍如何使用Hyperledger Fabic实现Token代币,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Hyperledger Fabic 也能实现Token
千家信息网最后更新 2025年02月03日如何使用Hyperledger Fabic实现Token代币
这篇文章主要介绍如何使用Hyperledger Fabic实现Token代币,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Hyperledger Fabic 也能实现Token代币
33.2.14.2. 积分通正(代币)
我发现用以太坊思维,将以太坊代币合约搬到 hyperledger 上,一样可以实现代币的功能,这个代币除了不能上交易所,基本满足我们替代积分系统的需求,下面是我写了这样一个合约,在超级账本上实现类似以太坊的代币转账功能。
package mainimport ( "bytes" "encoding/json" "fmt" "strconv" "github.com/hyperledger/fabric/core/chaincode/shim" sc "github.com/hyperledger/fabric/protos/peer")// Define the Smart Contract structuretype SmartContract struct {}type Token struct { Owner string `json:"Owner"` TotalSupply uint `json:"TotalSupply"` TokenName string `json:"TokenName"` TokenSymbol string `json:"TokenSymbol"` BalanceOf map[string]uint `json:"BalanceOf"`}func (token *Token) initialSupply(){ token.BalanceOf[token.Owner] = token.TotalSupply;}func (token *Token) transfer (_from string, _to string, _value uint){ if(token.BalanceOf[_from] >= _value){ token.BalanceOf[_from] -= _value; token.BalanceOf[_to] += _value; }}func (token *Token) balance (_from string) uint{ return token.BalanceOf[_from]}func (token *Token) burn(_value uint) { if(token.BalanceOf[token.Owner] >= _value){ token.BalanceOf[token.Owner] -= _value; token.TotalSupply -= _value; }}func (token *Token) burnFrom(_from string, _value uint) { if(token.BalanceOf[_from] >= _value){ token.BalanceOf[_from] -= _value; token.TotalSupply -= _value; }}func (token *Token) mint(_value uint) { token.BalanceOf[token.Owner] += _value; token.TotalSupply += _value; }func (s *SmartContract) Init(stub shim.ChaincodeStubInterface) sc.Response { return shim.Success(nil)}func (s *SmartContract) initLedger(stub shim.ChaincodeStubInterface) sc.Response { token := &Token{ Owner: "netkiller", TotalSupply: 10000, TokenName: "代币通正", TokenSymbol: "COIN", BalanceOf: map[string]uint{}} token.initialSupply() tokenAsBytes, _ := json.Marshal(token) stub.PutState("Token", tokenAsBytes) fmt.Println("Added", tokenAsBytes) return shim.Success(nil)}func (s *SmartContract) transferToken(stub shim.ChaincodeStubInterface, args []string) sc.Response { if len(args) != 3 { return shim.Error("Incorrect number of arguments. Expecting 2") } tokenAsBytes, _ := stub.GetState(args[0]) token := Token{} json.Unmarshal(tokenAsBytes, &token) token.transfer(args[1],args[2],args[3]) tokenAsBytes, _ = json.Marshal(token) stub.PutState(args[0], tokenAsBytes) return shim.Success(nil)}func (s *SmartContract) balanceToken(stub shim.ChaincodeStubInterface, args []string) sc.Response { if len(args) != 1 { return shim.Error("Incorrect number of arguments. Expecting 1") } tokenAsBytes, _ := stub.GetState(args[0]) token := Token{} json.Unmarshal(tokenAsBytes, &token) amount := token.balance(args[1]) return shim.Success(amount)}func (s *SmartContract) Invoke(stub shim.ChaincodeStubInterface) sc.Response { // Retrieve the requested Smart Contract function and arguments function, args := stub.GetFunctionAndParameters() // Route to the appropriate handler function to interact with the ledger appropriately if function == "balanceToken" { return s.balanceToken(stub, args) } else if function == "initLedger" { return s.initLedger(stub) } else if function == "transferToken" { return s.transferToken(stub, args) } return shim.Error("Invalid Smart Contract function name.")}// The main function is only relevant in unit test mode. Only included here for completeness.func main() { // Create a new Smart Contract err := shim.Start(new(SmartContract)) if err != nil { fmt.Printf("Error creating new Smart Contract: %s", err) }}
合约代码的测试
func main(){ token := &Token{ Owner: "netkiller", // 代币管理者 TotalSupply: 10000, // 代币发行总量 TokenName: "积分连", // 代币名称 TokenSymbol: "NEO", // 代币符号 NEO BalanceOf: map[string]uint{}} token.initialSupply() // 初始化代币 fmt.Println(token.balance("netkiller")) // 查询余额 token.transfer("netkiller","neo", 100) // 转账,这里账号使用用户ID,没有使用以太坊钱包那样的哈希值,因为哈希值不便于记忆。 fmt.Println(token.balance("netkiller")) fmt.Println(token.balance("neo"))}
我们可以建立很多套这样的比,例如水果币,蔬菜币,流量币...
开发一个小型交易所难度也不大,让用户在交易所中交易这些币。
以上是"如何使用Hyperledger Fabic实现Token代币"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
代币
以太
交易
交易所
合约
积分
内容
功能
用户
篇文章
哈希
转账
不大
代码
价值
余额
兴趣
名称
小伙
小伙伴
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
用友u9数据库文件位置
网络安全法治日信息简报
即时通讯软件开发的售后
激战2怎么加不同服务器的好友
系统数据库哪个最重要
邮件服务器的安全
阿里云服务器客服是做什么的
讲解网络技术的书
2021年网络安全知识问答答案
课堂作业设计数据库
昆明服务器回收公司电话
软件开发和云电脑关系
西门子串口服务器
怎样看电脑服务器地址和端口信息
软件开发文档 app
网络安全内部
嘉定区质量网络技术五星服务
数据库建模工具 开源
多个数据库连接图
为向互联网科技有限公司
湖北账三丰互联网科技有限公司
佛山东汇网络技术
互联网软件开发难学吗
数据库物理设计例子
山东谷联网络技术有限公司官网
xps软件开发如何
35岁转行软件开发可以吗
最新版网络安全手抄报
DECENT翻译软件开发
滨州定制软件开发外包公司