code: func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallMsg, blockNumber *big.Int) ([]byte, error) {
  	b.mu.Lock()
  	defer b.mu.Unlock()
  
  	if blockNumber != nil && blockNumber.Cmp(b.blockchain.CurrentBlock().Number()) != 0 {
  		return nil, errBlockNumberUnsupported
  	}
  	state, err := b.blockchain.State()
  	if err != nil {
  		return nil, err
  	}
  	rval, _, _, err := b.callContract(ctx, call, b.blockchain.CurrentBlock(), state)
  	return rval, err
  }
docs: // CallContract executes a contract call.