Skip to content

Commit 8ebd75c

Browse files
authored
Add opportunity provider script (#113)
1 parent 2f7a263 commit 8ebd75c

File tree

12 files changed

+1355
-4
lines changed

12 files changed

+1355
-4
lines changed

contracts/script/Vault.s.sol

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {OpportunityAdapter} from "src/opportunity-adapter/OpportunityAdapter.sol
1212
import {OpportunityAdapterFactory} from "src/opportunity-adapter/OpportunityAdapterFactory.sol";
1313
import {ExpressRelay} from "src/express-relay/ExpressRelay.sol";
1414
import {ExpressRelayUpgradable} from "src/express-relay/ExpressRelayUpgradable.sol";
15+
import {OpportunityProvider} from "test/opportunity-provider/OpportunityProvider.sol";
1516
import "src/express-relay/Errors.sol";
1617
import {MyToken} from "test/MyToken.sol";
1718
import {WETH9} from "test/WETH9.sol";
@@ -149,6 +150,24 @@ contract VaultScript is Script {
149150
return permit2;
150151
}
151152

153+
function deployOpportunityProvider(
154+
address admin,
155+
address expressRelay,
156+
address permit2
157+
) public returns (address) {
158+
(, uint256 skDeployer) = getDeployer();
159+
vm.startBroadcast(skDeployer);
160+
161+
OpportunityProvider provider = new OpportunityProvider(
162+
admin,
163+
expressRelay,
164+
permit2
165+
);
166+
vm.stopBroadcast();
167+
console.log("Provoder at", address(provider));
168+
return address(provider);
169+
}
170+
152171
function deployAll()
153172
public
154173
returns (address, address, address, address, address, address)

contracts/test/opportunity-provider/OpportunityProvider.sol

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@ import "openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol";
1212
import "@pythnetwork/express-relay-sdk-solidity/IExpressRelay.sol";
1313
import {OpportunityProviderHasher} from "./OpportunityProviderHasher.sol";
1414

15-
abstract contract OpportunityProvider is
16-
ReentrancyGuard,
17-
OpportunityProviderHasher
18-
{
15+
contract OpportunityProvider is ReentrancyGuard, OpportunityProviderHasher {
1916
using SafeERC20 for IERC20;
2017

2118
address _admin;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist
2+
node_modules
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Overview
2+
3+
This script is designed to provide opportunity using the OpportunityProvider contract.
4+
5+
## Installation
6+
7+
### npm
8+
9+
```
10+
$ npm install
11+
```
12+
13+
## Quickstart
14+
15+
### Approve Tokens
16+
17+
To provide a new opportunity, first make sure that you approved your tokens for `Permit2` contract using the command below:
18+
19+
```
20+
# Approve Permit2 to use them
21+
cast send \
22+
--private-key $PRIVATE_KEY \
23+
--rpc-url $RPC_URL \
24+
$TOKEN \
25+
"approve(address spender, uint256 value)" \
26+
$PERMIT2 $AMOUNT
27+
```
28+
29+
### Provide Opportunity
30+
31+
Then update the `opportunity.json` and `config.json` files for the opportunity you want to provide, and then run the following command:
32+
33+
```
34+
$ npm run opportunity-provider
35+
```
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
export const abi = [
2+
{
3+
constant: true,
4+
inputs: [],
5+
name: "name",
6+
outputs: [
7+
{
8+
name: "",
9+
type: "string",
10+
},
11+
],
12+
payable: false,
13+
stateMutability: "view",
14+
type: "function",
15+
},
16+
{
17+
constant: false,
18+
inputs: [
19+
{
20+
name: "_spender",
21+
type: "address",
22+
},
23+
{
24+
name: "_value",
25+
type: "uint256",
26+
},
27+
],
28+
name: "approve",
29+
outputs: [
30+
{
31+
name: "",
32+
type: "bool",
33+
},
34+
],
35+
payable: false,
36+
stateMutability: "nonpayable",
37+
type: "function",
38+
},
39+
{
40+
constant: true,
41+
inputs: [],
42+
name: "totalSupply",
43+
outputs: [
44+
{
45+
name: "",
46+
type: "uint256",
47+
},
48+
],
49+
payable: false,
50+
stateMutability: "view",
51+
type: "function",
52+
},
53+
{
54+
constant: false,
55+
inputs: [
56+
{
57+
name: "_from",
58+
type: "address",
59+
},
60+
{
61+
name: "_to",
62+
type: "address",
63+
},
64+
{
65+
name: "_value",
66+
type: "uint256",
67+
},
68+
],
69+
name: "transferFrom",
70+
outputs: [
71+
{
72+
name: "",
73+
type: "bool",
74+
},
75+
],
76+
payable: false,
77+
stateMutability: "nonpayable",
78+
type: "function",
79+
},
80+
{
81+
constant: true,
82+
inputs: [],
83+
name: "decimals",
84+
outputs: [
85+
{
86+
name: "",
87+
type: "uint8",
88+
},
89+
],
90+
payable: false,
91+
stateMutability: "view",
92+
type: "function",
93+
},
94+
{
95+
constant: true,
96+
inputs: [
97+
{
98+
name: "_owner",
99+
type: "address",
100+
},
101+
],
102+
name: "balanceOf",
103+
outputs: [
104+
{
105+
name: "balance",
106+
type: "uint256",
107+
},
108+
],
109+
payable: false,
110+
stateMutability: "view",
111+
type: "function",
112+
},
113+
{
114+
constant: true,
115+
inputs: [],
116+
name: "symbol",
117+
outputs: [
118+
{
119+
name: "",
120+
type: "string",
121+
},
122+
],
123+
payable: false,
124+
stateMutability: "view",
125+
type: "function",
126+
},
127+
{
128+
constant: false,
129+
inputs: [
130+
{
131+
name: "_to",
132+
type: "address",
133+
},
134+
{
135+
name: "_value",
136+
type: "uint256",
137+
},
138+
],
139+
name: "transfer",
140+
outputs: [
141+
{
142+
name: "",
143+
type: "bool",
144+
},
145+
],
146+
payable: false,
147+
stateMutability: "nonpayable",
148+
type: "function",
149+
},
150+
{
151+
constant: true,
152+
inputs: [
153+
{
154+
name: "_owner",
155+
type: "address",
156+
},
157+
{
158+
name: "_spender",
159+
type: "address",
160+
},
161+
],
162+
name: "allowance",
163+
outputs: [
164+
{
165+
name: "",
166+
type: "uint256",
167+
},
168+
],
169+
payable: false,
170+
stateMutability: "view",
171+
type: "function",
172+
},
173+
{
174+
payable: true,
175+
stateMutability: "payable",
176+
type: "fallback",
177+
},
178+
{
179+
anonymous: false,
180+
inputs: [
181+
{
182+
indexed: true,
183+
name: "owner",
184+
type: "address",
185+
},
186+
{
187+
indexed: true,
188+
name: "spender",
189+
type: "address",
190+
},
191+
{
192+
indexed: false,
193+
name: "value",
194+
type: "uint256",
195+
},
196+
],
197+
name: "Approval",
198+
type: "event",
199+
},
200+
{
201+
anonymous: false,
202+
inputs: [
203+
{
204+
indexed: true,
205+
name: "from",
206+
type: "address",
207+
},
208+
{
209+
indexed: true,
210+
name: "to",
211+
type: "address",
212+
},
213+
{
214+
indexed: false,
215+
name: "value",
216+
type: "uint256",
217+
},
218+
],
219+
name: "Transfer",
220+
type: "event",
221+
},
222+
] as const;

0 commit comments

Comments
 (0)