Compare commits

...
Author SHA1 Message Date
sam-keen 3fd8205587 ci-make-deploy-preview 2023-03-31 11:57:34 +01:00
Matthew Russell 2b77421600 fix: add gas estimates with a buffer for all token app tx 2023-03-30 14:27:17 -07:00
6 changed files with 64 additions and 18 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
**_Control panel for your VEGA tokens_**
<img width="1438" alt="Screenshot 2021-12-11 at 06 32 51" src="https://user-images.githubusercontent.com/13255539/145666935-563fc1ff-35bc-4cd9-ae6d-cf711cc23454.png">
<img width="1437" alt="Screenshot 2021-12-11 at 06 32 51" src="https://user-images.githubusercontent.com/13255539/145666935-563fc1ff-35bc-4cd9-ae6d-cf711cc23454.png">
## Features
@@ -1,6 +1,6 @@
import { ethers } from 'ethers';
import abi from '../abis/staking_abi.json';
import { prepend0x } from '../utils';
import { calcGasBuffer, prepend0x } from '../utils';
export class StakingBridge {
public contract: ethers.Contract;
@@ -14,18 +14,37 @@ export class StakingBridge {
this.address = address;
}
stake(amount: string, vegaPublicKey: string) {
return this.contract.stake(amount, prepend0x(vegaPublicKey));
async stake(amount: string, vegaPublicKey: string) {
const spender = prepend0x(vegaPublicKey);
const res = await this.contract.estimateGas.stake(amount, spender);
const gasLimit = calcGasBuffer(res);
return this.contract.stake(amount, spender, {
gasLimit,
});
}
remove_stake(amount: string, vegaPublicKey: string) {
return this.contract.remove_stake(amount, prepend0x(vegaPublicKey));
async remove_stake(amount: string, vegaPublicKey: string) {
const spender = prepend0x(vegaPublicKey);
const res = await this.contract.estimateGas.remove_stake(amount, spender);
const gasLimit = calcGasBuffer(res);
return this.contract.remove_stake(amount, spender, {
gasLimit,
});
}
transfer_stake(amount: string, newAddress: string, vegaPublicKey: string) {
return this.contract.transfer_stake(
async transfer_stake(
amount: string,
newAddress: string,
vegaPublicKey: string
) {
const pubkey = prepend0x(vegaPublicKey);
const res = await this.contract.estimateGas.transfer_stake(
amount,
newAddress,
prepend0x(vegaPublicKey)
pubkey
);
const gasLimit = calcGasBuffer(res);
return this.contract.transfer_stake(amount, newAddress, pubkey, {
gasLimit,
});
}
staking_token() {
return this.contract.staking_token();
@@ -1,6 +1,6 @@
import { ethers } from 'ethers';
import abi from '../abis/vesting_abi.json';
import { prepend0x } from '../utils';
import { prepend0x, calcGasBuffer } from '../utils';
export class TokenVesting {
public contract: ethers.Contract;
@@ -14,11 +14,21 @@ export class TokenVesting {
this.address = address;
}
stake_tokens(amount: string, vegaPublicKey: string) {
return this.contract.stake_tokens(amount, prepend0x(vegaPublicKey));
async stake_tokens(amount: string, vegaPublicKey: string) {
const spender = prepend0x(vegaPublicKey);
const res = await this.contract.estimateGas.stake_tokens(amount, spender);
const gasLimit = calcGasBuffer(res);
return this.contract.stake_tokens(amount, spender, {
gasLimit,
});
}
remove_stake(amount: string, vegaPublicKey: string) {
return this.contract.remove_stake(amount, prepend0x(vegaPublicKey));
async remove_stake(amount: string, vegaPublicKey: string) {
const spender = prepend0x(vegaPublicKey);
const res = await this.contract.estimateGas.remove_stake(amount, spender);
const gasLimit = calcGasBuffer(res);
return this.contract.remove_stake(amount, spender, {
gasLimit,
});
}
stake_balance(address: string, vegaPublicKey: string) {
return this.contract.stake_balance(address, prepend0x(vegaPublicKey));
@@ -38,7 +48,13 @@ export class TokenVesting {
user_total_all_tranches(address: string) {
return this.contract.user_total_all_tranches(address);
}
withdraw_from_tranche(trancheId: number) {
return this.contract.withdraw_from_tranche(trancheId);
async withdraw_from_tranche(trancheId: number) {
const res = await this.contract.estimateGas.withdraw_from_tranche(
trancheId
);
const gasLimit = calcGasBuffer(res);
return this.contract.withdraw_from_tranche(trancheId, {
gasLimit,
});
}
}
+7 -2
View File
@@ -1,6 +1,7 @@
import type { BigNumber } from 'ethers';
import { ethers } from 'ethers';
import erc20Abi from '../abis/erc20_abi.json';
import { calcGasBuffer } from '../utils';
export class Token {
public contract: ethers.Contract;
@@ -23,8 +24,12 @@ export class Token {
allowance(owner: string, spender: string): Promise<BigNumber> {
return this.contract.allowance(owner, spender);
}
approve(spender: string, amount: string) {
return this.contract.approve(spender, amount);
async approve(spender: string, amount: string) {
const res = await this.contract.estimateGas.approve(spender, amount);
const gasLimit = calcGasBuffer(res);
return this.contract.approve(spender, amount, {
gasLimit,
});
}
decimals(): Promise<number> {
return this.contract.decimals();
@@ -0,0 +1,5 @@
import type { BigNumber as EthersBigNumber } from 'ethers';
export function calcGasBuffer(value: EthersBigNumber): EthersBigNumber {
return value.mul(120).div(100);
}
+1
View File
@@ -1,2 +1,3 @@
export * from './ascii-to-hex';
export * from './prepend-0x';
export * from './calc-gas-buffer';