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  }