code: func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.PrivateKey, backend Backend) (*Chequebook, error) {
  	balance := new(big.Int)
  	sent := make(map[common.Address]*big.Int)
  
  	chbook, err := contract.NewChequebook(contractAddr, backend)
  	if err != nil {
  		return nil, err
  	}
  	transactOpts := bind.NewKeyedTransactor(prvKey)
  	session := &contract.ChequebookSession{
  		Contract:     chbook,
  		TransactOpts: *transactOpts,
  	}
  
  	cb := &Chequebook{
  		prvKey:       prvKey,
  		balance:      balance,
  		contractAddr: contractAddr,
  		sent:         sent,
  		path:         path,
  		backend:      backend,
  		owner:        transactOpts.From,
  		contract:     chbook,
  		session:      session,
  		log:          log.New("contract", contractAddr),
  	}
  	if (contractAddr != common.Address{}) {
  		cb.setBalanceFromBlockChain()
  		cb.log.Trace("New chequebook initialised", "owner", cb.owner, "balance", cb.balance)
  	}
  	return cb, nil
  }
docs: // NewChequebook creates a new Chequebook.