code: func DeployContract(opts *TransactOpts, abi abi.ABI, bytecode []byte, backend ContractBackend, params ...interface{}) (common.Address, *types.Transaction, *BoundContract, error) {
  	// Otherwise try to deploy the contract
  	c := NewBoundContract(common.Address{}, abi, backend, backend, backend)
  
  	input, err := c.abi.Pack("", params...)
  	if err != nil {
  		return common.Address{}, nil, nil, err
  	}
  	tx, err := c.transact(opts, nil, append(bytecode, input...))
  	if err != nil {
  		return common.Address{}, nil, nil, err
  	}
  	c.address = crypto.CreateAddress(opts.From, tx.Nonce())
  	return c.address, tx, c, nil
  }
docs: // DeployContract deploys a contract onto the Ethereum blockchain and binds the
  // deployment address with a Go wrapper.