千家信息网

如何使用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代币"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0