-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFarm.sol
73 lines (60 loc) · 2.47 KB
/
Farm.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
Command Action.Farm
Description Deposit lp tokens to farming
Parents 1
Childs 0
Target https://github.com/broxus/flatqube-dao-contracts/blob/master/contracts/gauge/base/gauge/GaugeBase.sol#L18
*/
pragma ever-solidity ^0.63.0;
pragma AbiHeader time;
pragma AbiHeader expire;
pragma AbiHeader pubkey;
import "./Transfer.sol";
struct FarmActionData {
address token;
uint128 amount;
address farm;
address remainingGasTo;
address depositOwner;
uint32 lockTime;
uint128 value;
uint8 flag;
}
abstract contract FarmAction is TransferAction {
function encodeFarmActionData(
AmountExtended amount, address farm, AddressExtended depositOwner, uint32 lockTime, uint128 value, uint8 flag
) public pure returns (TvmCell encoded) {
return abi.encode(amount, farm, depositOwner, lockTime, value, flag);
}
function decodeFarmActionData(TvmCell params, ExecutionData data, address owner) public pure returns (FarmActionData decoded) {
(AmountExtended amount, address farm, AddressExtended depositOwner, uint32 lockTime, uint128 value, uint8 flag) =
abi.decode(params, (AmountExtended, address, AddressExtended, uint32, uint128, uint8));
address sender = data.callData.sender;
uint128 amountDecoded = ExtendedTypes.decodeAmountExtended(amount, data);
address depositOwnerDecoded = ExtendedTypes.decodeAddressExtended(depositOwner, sender, owner);
return FarmActionData(data.token, amountDecoded, farm, sender, depositOwnerDecoded, lockTime, value, flag);
}
function _farm(FarmActionData data) internal {
TvmCell payload = _buildFarmPayload(data.depositOwner, data.lockTime);
_transfer(TransferActionData({
token: data.token,
amount: data.amount,
recipient: data.farm,
isDeployWallet: false,
remainingGasTo: data.remainingGasTo,
payload: payload,
value: data.value,
flag: data.flag,
force: false
}));
}
function _buildFarmPayload(address depositOwner, uint32 lockTime) private pure returns (TvmCell) {
TvmBuilder builder;
builder.store(depositOwner); // deposit owner
builder.store(lockTime); // lock time
builder.store(false); // can claim
builder.store(uint32(0)); // id
builder.store(uint32(0)); // nonce
return builder.toCell();
}
}