Skip to content

Commit

Permalink
Initial go request builder package
Browse files Browse the repository at this point in the history
  • Loading branch information
cbrit committed Jun 27, 2024
1 parent fe82aa2 commit b7be442
Show file tree
Hide file tree
Showing 16 changed files with 1,370 additions and 0 deletions.
18 changes: 18 additions & 0 deletions go_request_builder/adaptor_call.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package builder

import "github.com/peggyjv/steward/steward_proto_go/steward_proto"

type AdaptorCallBuilder struct {
callData *steward_proto.AdaptorCall,
}

func NewAdaptorCallBuilder(adaptor common.Address) *AdaptorCallBuilder {
return &AdaptorCallBuilder{
callData: &steward_proto.AdaptorCall{
Adaptor: adaptor.Hex(),
CallData: &steward_proto.AdaptorCall_CellarV2_5{},
},
}
}


70 changes: 70 additions & 0 deletions go_request_builder/adaptors/aave_v2_a_token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package adaptors

import (
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/peggyjv/steward/steward_proto_go/steward_proto"
)

type AaveV2ATokenAdaptorV2CallBuilder struct {
adaptor common.Address
calls []*steward_proto.AaveATokenAdaptorV2
}

func NewAaveV2ATokenAdaptorV2CallBuilder(adaptor common.Address) *AaveV2ATokenAdaptorV2CallBuilder {
return &AaveV2ATokenAdaptorV2CallBuilder{
adaptor: adaptor,
calls: make([]*steward_proto.AaveATokenAdaptorV2, 0),
}
}

func (b *AaveV2ATokenAdaptorV2CallBuilder) Build() *steward_proto.AdaptorCall {
return &steward_proto.AdaptorCall{
Adaptor: b.adaptor.Hex(),
CallData: &steward_proto.AdaptorCall_AaveATokenV2Calls{
AaveATokenV2Calls: &steward_proto.AaveATokenAdaptorV2Calls{
Calls: b.calls,
},
},
}
}

func (b *AaveV2ATokenAdaptorV2CallBuilder) RevokeApproval(asset common.Address, spender common.Address) *AaveV2ATokenAdaptorV2CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveATokenAdaptorV2{
Function: &steward_proto.AaveATokenAdaptorV2_RevokeApproval{
RevokeApproval: &steward_proto.RevokeApproval{
Asset: asset.Hex(),
Spender: spender.Hex(),
},
},
})

return b
}

func (b *AaveV2ATokenAdaptorV2CallBuilder) DepositToAave(token common.Address, amount *big.Int) *AaveV2ATokenAdaptorV2CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveATokenAdaptorV2{
Function: &steward_proto.AaveATokenAdaptorV2_DepositToAave_{
DepositToAave: &steward_proto.AaveATokenAdaptorV2_DepositToAave{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}

func (b *AaveV2ATokenAdaptorV2CallBuilder) WithdrawFromAave(token common.Address, amount *big.Int) *AaveV2ATokenAdaptorV2CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveATokenAdaptorV2{
Function: &steward_proto.AaveATokenAdaptorV2_WithdrawFromAave_{
WithdrawFromAave: &steward_proto.AaveATokenAdaptorV2_WithdrawFromAave{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}
34 changes: 34 additions & 0 deletions go_request_builder/adaptors/aave_v2_a_token_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package adaptors

import (
"math/big"
"testing"

"github.com/ethereum/go-ethereum/common"
"github.com/peggyjv/steward/steward_proto_go/steward_proto"
"github.com/stretchr/testify/assert"
)

// Test the AaveV2ATokenAdaptorCallBuilder constructor
func TestNewAaveATokenAdaptorCall(t *testing.T) {
// Create a new AaveV2ATokenAdaptorCallBuilder
adaptor := common.HexToAddress("0x1234567890123456789012345678901234567890")
builder := NewAaveV2ATokenAdaptorV2CallBuilder(adaptor)

// Check the builder
assert.Equal(t, adaptor.Hex(), builder.adaptor.Hex())
assert.Equal(t, 0, len(builder.calls))

asset := common.HexToAddress("0x00000000000000000000000000000000000000000")
spender := common.HexToAddress("0x11111111111111111111111111111111111111111")
builder.RevokeApproval(asset, spender)
builder.DepositToAave(asset, big.NewInt(100))
builder.WithdrawFromAave(asset, big.NewInt(100))

// Check the builder
assert.Equal(t, adaptor.Hex(), builder.adaptor.Hex())
assert.Equal(t, 3, len(builder.calls))
assert.IsType(t, &steward_proto.AaveATokenAdaptorV2_RevokeApproval{}, builder.calls[0].Function)
assert.IsType(t, &steward_proto.AaveATokenAdaptorV2_DepositToAave_{}, builder.calls[1].Function)
assert.IsType(t, &steward_proto.AaveATokenAdaptorV2_WithdrawFromAave_{}, builder.calls[2].Function)
}
55 changes: 55 additions & 0 deletions go_request_builder/adaptors/aave_v2_enable_asset_as_collateral.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package adaptors

import (
"github.com/ethereum/go-ethereum/common"
"github.com/peggyjv/steward/steward_proto_go/steward_proto"
)

type AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder struct {
adaptor common.Address
calls []*steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1
}

func NewAaveV2EnableAssetAsCollateralAdaptorV1CallBuilder(adaptor common.Address) *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder {
return &AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder{
adaptor: adaptor,
calls: make([]*steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1, 0),
}
}

func (b *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder) Build() *steward_proto.AdaptorCall {
return &steward_proto.AdaptorCall{
Adaptor: b.adaptor.Hex(),
CallData: &steward_proto.AdaptorCall_AaveV2EnableAssetAsCollateralV1Calls{
AaveV2EnableAssetAsCollateralV1Calls: &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1Calls{
Calls: b.calls,
},
},
}
}

func (b *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder) RevokeApproval(asset common.Address, spender common.Address) *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1{
Function: &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1_RevokeApproval{
RevokeApproval: &steward_proto.RevokeApproval{
Asset: asset.Hex(),
Spender: spender.Hex(),
},
},
})

return b
}

func (b *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder) SetUserUseReserveAsCollateral(asset common.Address, useAsCollateral bool) *AaveV2EnableAssetAsCollateralAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1{
Function: &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1_SetUserUseReserveAsCollateral_{
SetUserUseReserveAsCollateral: &steward_proto.AaveV2EnableAssetAsCollateralAdaptorV1_SetUserUseReserveAsCollateral{
Asset: asset.Hex(),
UseAsCollateral: useAsCollateral,
},
},
})

return b
}
95 changes: 95 additions & 0 deletions go_request_builder/adaptors/aave_v3_a_token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package adaptors

import (
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/peggyjv/steward/steward_proto_go/steward_proto"
)

type AaveV3ATokenAdaptorV1CallBuilder struct {
adaptor common.Address
calls []*steward_proto.AaveV3ATokenAdaptorV1
}

func NewAaveV3ATokenAdaptorV1CallBuilder(adaptor common.Address) *AaveV3ATokenAdaptorV1CallBuilder {
return &AaveV3ATokenAdaptorV1CallBuilder{
adaptor: adaptor,
calls: make([]*steward_proto.AaveV3ATokenAdaptorV1, 0),
}
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) Build() *steward_proto.AdaptorCall {
return &steward_proto.AdaptorCall{
Adaptor: b.adaptor.Hex(),
CallData: &steward_proto.AdaptorCall_AaveV3ATokenV1Calls{
AaveV3ATokenV1Calls: &steward_proto.AaveV3ATokenAdaptorV1Calls{
Calls: b.calls,
},
},
}
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) RevokeApproval(asset common.Address, spender common.Address) *AaveV3ATokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3ATokenAdaptorV1{
Function: &steward_proto.AaveV3ATokenAdaptorV1_RevokeApproval{
RevokeApproval: &steward_proto.RevokeApproval{
Asset: asset.Hex(),
Spender: spender.Hex(),
},
},
})

return b
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) DepositToAave(token common.Address, amount *big.Int) *AaveV3ATokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3ATokenAdaptorV1{
Function: &steward_proto.AaveV3ATokenAdaptorV1_DepositToAave_{
DepositToAave: &steward_proto.AaveV3ATokenAdaptorV1_DepositToAave{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) WithdrawFromAave(token common.Address, amount *big.Int) *AaveV3ATokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3ATokenAdaptorV1{
Function: &steward_proto.AaveV3ATokenAdaptorV1_WithdrawFromAave_{
WithdrawFromAave: &steward_proto.AaveV3ATokenAdaptorV1_WithdrawFromAave{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) AdjustIsolationModeAssetAsCollateral(asset common.Address, useAsCollateral bool) *AaveV3ATokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3ATokenAdaptorV1{
Function: &steward_proto.AaveV3ATokenAdaptorV1_AdjustIsolationModeAssetAsCollateral_{
AdjustIsolationModeAssetAsCollateral: &steward_proto.AaveV3ATokenAdaptorV1_AdjustIsolationModeAssetAsCollateral{
Asset: asset.Hex(),
UseAsCollateral: useAsCollateral,
},
},
})

return b
}

func (b *AaveV3ATokenAdaptorV1CallBuilder) ChangeEMode(categoryId uint32) *AaveV3ATokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3ATokenAdaptorV1{
Function: &steward_proto.AaveV3ATokenAdaptorV1_ChangeEmode{
ChangeEmode: &steward_proto.AaveV3ATokenAdaptorV1_ChangeEMode{
CategoryId: categoryId,
},
},
})

return b
}
83 changes: 83 additions & 0 deletions go_request_builder/adaptors/aave_v3_debt_token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package adaptors

import (
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/peggyjv/steward/steward_proto_go/steward_proto"
)

type AaveV3DebtTokenAdaptorV1CallBuilder struct {
adaptor common.Address
calls []*steward_proto.AaveV3DebtTokenAdaptorV1
}

func NewAaveV3DebtTokenAdaptorV1CallBuilder(adaptor common.Address) *AaveV3DebtTokenAdaptorV1CallBuilder {
return &AaveV3DebtTokenAdaptorV1CallBuilder{
adaptor: adaptor,
calls: make([]*steward_proto.AaveV3DebtTokenAdaptorV1, 0),
}
}

func (b *AaveV3DebtTokenAdaptorV1CallBuilder) Build() *steward_proto.AdaptorCall {
return &steward_proto.AdaptorCall{
Adaptor: b.adaptor.Hex(),
CallData: &steward_proto.AdaptorCall_AaveV3DebtTokenV1Calls{
AaveV3DebtTokenV1Calls: &steward_proto.AaveV3DebtTokenAdaptorV1Calls{
Calls: b.calls,
},
},
}
}

func (b *AaveV3DebtTokenAdaptorV1CallBuilder) RevokeApproval(asset common.Address, spender common.Address) *AaveV3DebtTokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3DebtTokenAdaptorV1{
Function: &steward_proto.AaveV3DebtTokenAdaptorV1_RevokeApproval{
RevokeApproval: &steward_proto.RevokeApproval{
Asset: asset.Hex(),
Spender: spender.Hex(),
},
},
})

return b
}

func (b *AaveV3DebtTokenAdaptorV1CallBuilder) BorrowFromAave(token common.Address, amount *big.Int) *AaveV3DebtTokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3DebtTokenAdaptorV1{
Function: &steward_proto.AaveV3DebtTokenAdaptorV1_BorrowFromAave_{
BorrowFromAave: &steward_proto.AaveV3DebtTokenAdaptorV1_BorrowFromAave{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}

func (b *AaveV3DebtTokenAdaptorV1CallBuilder) RepayAaveDebt(token common.Address, amount *big.Int) *AaveV3DebtTokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3DebtTokenAdaptorV1{
Function: &steward_proto.AaveV3DebtTokenAdaptorV1_RepayAaveDebt_{
RepayAaveDebt: &steward_proto.AaveV3DebtTokenAdaptorV1_RepayAaveDebt{
Token: token.Hex(),
Amount: amount.String(),
},
},
})

return b
}

func (b *AaveV3DebtTokenAdaptorV1CallBuilder) RepayWithATokens(underlyingToken common.Address, amount *big.Int) *AaveV3DebtTokenAdaptorV1CallBuilder {
b.calls = append(b.calls, &steward_proto.AaveV3DebtTokenAdaptorV1{
Function: &steward_proto.AaveV3DebtTokenAdaptorV1_RepayWithATokens_{
RepayWithATokens: &steward_proto.AaveV3DebtTokenAdaptorV1_RepayWithATokens{
UnderlyingToken: underlyingToken.Hex(),
Amount: amount.String(),
},
},
})

return b
}
Loading

0 comments on commit b7be442

Please sign in to comment.