adjusted FetchContractData to work with variable number of contract method arguments, changed fetcher's FetchSupply method to more general FetchBigInt method and added FetchBool and FetchAddress methods
This commit is contained in:
+169
-30
@@ -15,11 +15,14 @@
|
||||
package mocks
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/vulcanize/vulcanizedb/examples/erc20_watcher/every_block"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||
"github.com/vulcanize/vulcanizedb/pkg/fakes"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
type Fetcher struct {
|
||||
@@ -28,6 +31,8 @@ type Fetcher struct {
|
||||
FetchedBlocks []int64
|
||||
BlockChain core.BlockChain
|
||||
supply big.Int
|
||||
balance map[string]*big.Int
|
||||
allowance map[string]map[string]*big.Int
|
||||
}
|
||||
|
||||
func (f *Fetcher) SetSupply(supply string) {
|
||||
@@ -38,69 +43,203 @@ func (f Fetcher) GetBlockChain() core.BlockChain {
|
||||
return f.BlockChain
|
||||
}
|
||||
|
||||
func (f *Fetcher) FetchSupplyOf(contractAbi string, contractAddress string, blockNumber int64) (big.Int, error) {
|
||||
func (f *Fetcher) FetchBigInt(method, contractAbi, contractAddress string, blockNumber int64, methodArgs []interface{}) (big.Int, error) {
|
||||
|
||||
f.Abi = contractAbi
|
||||
f.ContractAddress = contractAddress
|
||||
f.FetchedBlocks = append(f.FetchedBlocks, blockNumber)
|
||||
|
||||
accumulator := big.NewInt(1)
|
||||
f.supply.Add(&f.supply, accumulator)
|
||||
|
||||
return f.supply, nil
|
||||
if method == "totalSupply" {
|
||||
f.supply.Add(&f.supply, accumulator)
|
||||
|
||||
return f.supply, nil
|
||||
}
|
||||
|
||||
if method == "balanceOf" {
|
||||
rfl := reflect.ValueOf(methodArgs).Field(0)
|
||||
tokenHolderAddr := rfl.Interface().(string)
|
||||
pnt := f.balance[tokenHolderAddr]
|
||||
f.balance[tokenHolderAddr].Add(pnt, accumulator)
|
||||
|
||||
return *f.balance[tokenHolderAddr], nil
|
||||
}
|
||||
|
||||
if method == "allowance" {
|
||||
rfl1 := reflect.ValueOf(methodArgs).Field(0)
|
||||
rfl2 := reflect.ValueOf(methodArgs).Field(1)
|
||||
tokenHolderAddr := rfl1.Interface().(string)
|
||||
spenderAddr := rfl2.Interface().(string)
|
||||
pnt := f.allowance[tokenHolderAddr][spenderAddr]
|
||||
f.allowance[tokenHolderAddr][spenderAddr].Add(pnt, accumulator)
|
||||
|
||||
return *f.allowance[tokenHolderAddr][spenderAddr], nil
|
||||
}
|
||||
|
||||
return *big.NewInt(0), errors.New("invalid method argument")
|
||||
|
||||
}
|
||||
|
||||
type TotalSupplyRepository struct {
|
||||
TotalSuppliesCreated []every_block.TokenSupply
|
||||
MissingBlockNumbers []int64
|
||||
StartingBlock int64
|
||||
EndingBlock int64
|
||||
func (f *Fetcher) FetchBool(method, contractAbi, contractAddress string, blockNumber int64, methodArgs []interface{}) (bool, error) {
|
||||
//TODO: this
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func (fr *TotalSupplyRepository) Create(supply every_block.TokenSupply) error {
|
||||
func (f *Fetcher) FetchAddress(method, contractAbi, contractAddress string, blockNumber int64, methodArgs []interface{}) (common.Address, error) {
|
||||
//TODO: this
|
||||
var adr common.Address
|
||||
return adr, nil
|
||||
}
|
||||
|
||||
type ERC20TokenRepository struct {
|
||||
TotalSuppliesCreated []every_block.TokenSupply
|
||||
MissingSupplyBlockNumbers []int64
|
||||
TotalBalancesCreated []every_block.TokenBalance
|
||||
MissingBalanceBlockNumbers []int64
|
||||
TotalAllowancesCreated []every_block.TokenAllowance
|
||||
MissingAllowanceBlockNumbers []int64
|
||||
StartingBlock int64
|
||||
EndingBlock int64
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) CreateSupply(supply every_block.TokenSupply) error {
|
||||
fr.TotalSuppliesCreated = append(fr.TotalSuppliesCreated, supply)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fr *TotalSupplyRepository) MissingBlocks(startingBlock int64, highestBlock int64) ([]int64, error) {
|
||||
fr.StartingBlock = startingBlock
|
||||
fr.EndingBlock = highestBlock
|
||||
return fr.MissingBlockNumbers, nil
|
||||
func (fr *ERC20TokenRepository) CreateBalance(balance every_block.TokenBalance) error {
|
||||
fr.TotalBalancesCreated = append(fr.TotalBalancesCreated, balance)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fr *TotalSupplyRepository) SetMissingBlocks(missingBlocks []int64) {
|
||||
fr.MissingBlockNumbers = missingBlocks
|
||||
func (fr *ERC20TokenRepository) CreateAllowance(allowance every_block.TokenAllowance) error {
|
||||
fr.TotalAllowancesCreated = append(fr.TotalAllowancesCreated, allowance)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) MissingSupplyBlocks(startingBlock, highestBlock int64, tokenAddress string) ([]int64, error) {
|
||||
fr.StartingBlock = startingBlock
|
||||
fr.EndingBlock = highestBlock
|
||||
return fr.MissingSupplyBlockNumbers, nil
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) MissingBalanceBlocks(startingBlock, highestBlock int64, tokenAddress, holderAddress string) ([]int64, error) {
|
||||
fr.StartingBlock = startingBlock
|
||||
fr.EndingBlock = highestBlock
|
||||
return fr.MissingBalanceBlockNumbers, nil
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) MissingAllowanceBlocks(startingBlock, highestBlock int64, tokenAddress, holderAddress, spenderAddress string) ([]int64, error) {
|
||||
fr.StartingBlock = startingBlock
|
||||
fr.EndingBlock = highestBlock
|
||||
return fr.MissingAllowanceBlockNumbers, nil
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) SetMissingSupplyBlocks(missingBlocks []int64) {
|
||||
fr.MissingSupplyBlockNumbers = missingBlocks
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) SetMissingBalanceBlocks(missingBlocks []int64) {
|
||||
fr.MissingBalanceBlockNumbers = missingBlocks
|
||||
}
|
||||
|
||||
func (fr *ERC20TokenRepository) SetMissingAllowanceBlocks(missingBlocks []int64) {
|
||||
fr.MissingAllowanceBlockNumbers = missingBlocks
|
||||
}
|
||||
|
||||
type FailureRepository struct {
|
||||
createFail bool
|
||||
missingBlocksFail bool
|
||||
missingBlocksNumbers []int64
|
||||
createSupplyFail bool
|
||||
createBalanceFail bool
|
||||
createAllowanceFail bool
|
||||
missingSupplyBlocksFail bool
|
||||
missingBalanceBlocksFail bool
|
||||
missingAllowanceBlocksFail bool
|
||||
missingSupplyBlocksNumbers []int64
|
||||
missingBalanceBlocksNumbers []int64
|
||||
missingAllowanceBlocksNumbers []int64
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) Create(supply every_block.TokenSupply) error {
|
||||
if fr.createFail {
|
||||
func (fr *FailureRepository) CreateSupply(supply every_block.TokenSupply) error {
|
||||
if fr.createSupplyFail {
|
||||
return fakes.FakeError
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) MissingBlocks(startingBlock int64, highestBlock int64) ([]int64, error) {
|
||||
if fr.missingBlocksFail {
|
||||
return []int64{}, fakes.FakeError
|
||||
func (fr *FailureRepository) CreateBalance(balance every_block.TokenBalance) error {
|
||||
if fr.createBalanceFail {
|
||||
return fakes.FakeError
|
||||
} else {
|
||||
return fr.missingBlocksNumbers, nil
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetCreateFail(fail bool) {
|
||||
fr.createFail = fail
|
||||
func (fr *FailureRepository) CreateAllowance(allowance every_block.TokenAllowance) error {
|
||||
if fr.createAllowanceFail {
|
||||
return fakes.FakeError
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingBlocksFail(fail bool) {
|
||||
fr.missingBlocksFail = fail
|
||||
func (fr *FailureRepository) MissingSupplyBlocks(startingBlock, highestBlock int64, tokenAddress string) ([]int64, error) {
|
||||
if fr.missingSupplyBlocksFail {
|
||||
return []int64{}, fakes.FakeError
|
||||
} else {
|
||||
return fr.missingSupplyBlocksNumbers, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingBlocks(missingBlocks []int64) {
|
||||
fr.missingBlocksNumbers = missingBlocks
|
||||
func (fr *FailureRepository) MissingBalanceBlocks(startingBlock, highestBlock int64, tokenAddress, holderAddress string) ([]int64, error) {
|
||||
if fr.missingBalanceBlocksFail {
|
||||
return []int64{}, fakes.FakeError
|
||||
} else {
|
||||
return fr.missingBalanceBlocksNumbers, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) MissingAllowanceBlocks(startingBlock, highestBlock int64, tokenAddress, holderAddress, spenderAddress string) ([]int64, error) {
|
||||
if fr.missingAllowanceBlocksFail {
|
||||
return []int64{}, fakes.FakeError
|
||||
} else {
|
||||
return fr.missingAllowanceBlocksNumbers, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetCreateSupplyFail(fail bool) {
|
||||
fr.createSupplyFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetCreateBalanceFail(fail bool) {
|
||||
fr.createBalanceFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetCreateAllowanceFail(fail bool) {
|
||||
fr.createAllowanceFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingSupplyBlocksFail(fail bool) {
|
||||
fr.missingSupplyBlocksFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingBalanceBlocksFail(fail bool) {
|
||||
fr.missingBalanceBlocksFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingAllowanceBlocksFail(fail bool) {
|
||||
fr.missingAllowanceBlocksFail = fail
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingSupplyBlocks(missingBlocks []int64) {
|
||||
fr.missingSupplyBlocksNumbers = missingBlocks
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingBalanceBlocks(missingBlocks []int64) {
|
||||
fr.missingBalanceBlocksNumbers = missingBlocks
|
||||
}
|
||||
|
||||
func (fr *FailureRepository) SetMissingAllowanceBlocks(missingBlocks []int64) {
|
||||
fr.missingAllowanceBlocksNumbers = missingBlocks
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user