github.com/s7techlab/cckit@v0.10.5/examples/token/chaincode/erc20/erc20.go (about) 1 package erc20 2 3 import ( 4 "errors" 5 6 "github.com/s7techlab/cckit/examples/token/service/account" 7 "github.com/s7techlab/cckit/examples/token/service/allowance" 8 "github.com/s7techlab/cckit/examples/token/service/balance" 9 "github.com/s7techlab/cckit/examples/token/service/config" 10 "github.com/s7techlab/cckit/examples/token/service/config_erc20" 11 "github.com/s7techlab/cckit/router" 12 ) 13 14 var ( 15 Token = &config.CreateTokenTypeRequest{ 16 Name: `SomeToken`, 17 Symbol: `@`, 18 Decimals: 2, 19 TotalSupply: 10000000, 20 } 21 ) 22 23 func New() (*router.Chaincode, error) { 24 r := router.New(`erc20`) 25 26 // accountSvc resolves address as base58( invoker.Cert.PublicKey ) 27 accountSvc := account.NewLocalService() 28 configSvc := config.NewStateService() 29 // Balance management service 30 balanceSvc := balance.New(accountSvc, configSvc) 31 // Allowance management service 32 allowanceSvc := allowance.NewService(balanceSvc) 33 34 erc20ConfigSvc := &config_erc20.ERC20Service{Token: configSvc} 35 36 r.Init(func(ctx router.Context) (interface{}, error) { 37 // add token definition to state if not exists 38 token, err := config.CreateDefaultToken(ctx, configSvc, Token) 39 if err != nil { 40 if errors.Is(err, config.ErrTokenAlreadyExists) { 41 return nil, nil 42 } 43 return nil, err 44 } 45 46 // get chaincode instantiator address 47 ownerAddress, err := accountSvc.GetInvokerAddress(ctx, nil) 48 if err != nil { 49 return nil, err 50 } 51 52 // add `TotalSupply` to chaincode first committer 53 if err = balance.NewStore(ctx).Add(ownerAddress.Address, token, Token.TotalSupply); err != nil { 54 return nil, err 55 } 56 57 return nil, nil 58 }) 59 60 if err := balance.RegisterBalanceServiceChaincode(r, balanceSvc); err != nil { 61 return nil, err 62 } 63 if err := account.RegisterAccountServiceChaincode(r, accountSvc); err != nil { 64 return nil, err 65 } 66 if err := config_erc20.RegisterConfigERC20ServiceChaincode(r, erc20ConfigSvc); err != nil { 67 return nil, err 68 } 69 if err := allowance.RegisterAllowanceServiceChaincode(r, allowanceSvc); err != nil { 70 return nil, err 71 } 72 73 return router.NewChaincode(r), nil 74 }