contract_facade.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package extension
  2. import (
  3. "math/big"
  4. "github.com/ethereum/go-ethereum/accounts/abi/bind"
  5. "github.com/ethereum/go-ethereum/common"
  6. "github.com/ethereum/go-ethereum/core/types"
  7. "github.com/ethereum/go-ethereum/ethclient"
  8. "github.com/ethereum/go-ethereum/extension/extensionContracts"
  9. )
  10. type ManagementContractFacade interface {
  11. Transactor(managementAddress common.Address) (*extensionContracts.ContractExtenderTransactor, error)
  12. Caller(managementAddress common.Address) (*extensionContracts.ContractExtenderCaller, error)
  13. Deploy(args *bind.TransactOpts, toExtend common.Address, recipientAddress common.Address, recipientHash string) (*types.Transaction, error)
  14. GetAllVoters(addressToVoteOn common.Address) ([]common.Address, error)
  15. Close()
  16. }
  17. type EthclientManagementContractFacade struct {
  18. client *ethclient.Client
  19. }
  20. func NewManagementContractFacade(client *ethclient.Client) ManagementContractFacade {
  21. return EthclientManagementContractFacade{client: client}
  22. }
  23. func (facade EthclientManagementContractFacade) Transactor(managementAddress common.Address) (*extensionContracts.ContractExtenderTransactor, error) {
  24. return extensionContracts.NewContractExtenderTransactor(managementAddress, facade.client)
  25. }
  26. func (facade EthclientManagementContractFacade) Caller(managementAddress common.Address) (*extensionContracts.ContractExtenderCaller, error) {
  27. return extensionContracts.NewContractExtenderCaller(managementAddress, facade.client)
  28. }
  29. func (facade EthclientManagementContractFacade) Deploy(args *bind.TransactOpts, toExtend common.Address, recipientAddress common.Address, recipientHash string) (*types.Transaction, error) {
  30. _, tx, _, err := extensionContracts.DeployContractExtender(args, facade.client, toExtend, recipientAddress, recipientHash)
  31. return tx, err
  32. }
  33. func (facade EthclientManagementContractFacade) GetAllVoters(addressToVoteOn common.Address) ([]common.Address, error) {
  34. caller, err := facade.Caller(addressToVoteOn)
  35. if err != nil {
  36. return nil, err
  37. }
  38. numberOfVoters, err := caller.TotalNumberOfVoters(nil)
  39. if err != nil {
  40. return nil, err
  41. }
  42. var i int64
  43. var voters []common.Address
  44. for i = 0; i < numberOfVoters.Int64(); i++ {
  45. voter, err := caller.WalletAddressesToVote(nil, big.NewInt(i))
  46. if err != nil {
  47. return nil, err
  48. }
  49. voters = append(voters, voter)
  50. }
  51. return voters, nil
  52. }
  53. func (facade EthclientManagementContractFacade) Close() {
  54. facade.client.Close()
  55. }