73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"math/big"
|
|
"net/http"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
)
|
|
|
|
type ContractDeployed struct {
|
|
Address common.Address `json:"address"`
|
|
TransactionHash common.Hash `json:"txHash"`
|
|
BlockNumber int64 `json:"blockNumber"`
|
|
BlockHash common.Hash `json:"blockHash"`
|
|
}
|
|
|
|
type ContractDestroyed struct {
|
|
BlockNumber int64 `json:"blockNumber"`
|
|
}
|
|
|
|
type Tx struct {
|
|
From string `json:"from"`
|
|
To string `json:"to"`
|
|
Value *big.Int `json:"value"`
|
|
TransactionHash string `json:"txHash"`
|
|
BlockNumber int64 `json:"blockNumber"`
|
|
BlockHash string `json:"blockHash"`
|
|
}
|
|
|
|
type StorageKey struct {
|
|
Key string `json:"key"`
|
|
}
|
|
|
|
type CountIncremented struct {
|
|
BlockNumber *big.Int `json:"blockNumber"`
|
|
}
|
|
|
|
const ContractServerUrl = "http://localhost:3000"
|
|
|
|
// Factory which creates endpoint functions
|
|
func MakeGetAndDecodeFunc[R any](format string) func(...interface{}) (*R, error) {
|
|
return func(params ...interface{}) (*R, error) {
|
|
params = append([]interface{}{ContractServerUrl}, params...)
|
|
url := fmt.Sprintf(format, params...)
|
|
res, err := http.Get(url)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
if res.StatusCode != http.StatusOK {
|
|
return nil, fmt.Errorf("%s: %s", url, res.Status)
|
|
}
|
|
|
|
var data R
|
|
decoder := json.NewDecoder(res.Body)
|
|
return &data, decoder.Decode(&data)
|
|
}
|
|
}
|
|
|
|
var (
|
|
DeployContract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/deployContract")
|
|
DestroyContract = MakeGetAndDecodeFunc[ContractDestroyed]("%s/v1/destroyContract?addr=%s")
|
|
DeploySLVContract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/deploySLVContract")
|
|
DestroySLVContract = MakeGetAndDecodeFunc[ContractDestroyed]("%s/v1/destroySLVContract?addr=%s")
|
|
SendEth = MakeGetAndDecodeFunc[Tx]("%s/v1/sendEth?to=%s&value=%s")
|
|
GetStorageSlotKey = MakeGetAndDecodeFunc[StorageKey]("%s/v1/getStorageKey?contract=%s&label=%s")
|
|
IncrementCount = MakeGetAndDecodeFunc[CountIncremented]("%s/v1/incrementCount%s?addr=%s")
|
|
Create2Contract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/create2Contract?contract=%s&salt=%s")
|
|
)
|