Skip to content

Commit

Permalink
Removed token related storage code
Browse files Browse the repository at this point in the history
  • Loading branch information
aaroncox committed Jan 29, 2025
1 parent 1f26b83 commit ac0f251
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 134 deletions.
18 changes: 0 additions & 18 deletions contracts/api/include/api/api.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,6 @@ class [[eosio::contract("api")]] api : public contract
};
typedef eosio::singleton<"config"_n, config_row> config_table;

struct [[eosio::table("tokens")]] token_row
{
uint64_t id;
name contract;
symbol symbol;
uint64_t primary_key() const { return id; }
};
typedef eosio::multi_index<"tokens"_n, token_row> token_table;

[[eosio::action]] void addtoken(const token_definition token);
[[eosio::action]] void addtokens(const std::vector<token_definition> tokens);
[[eosio::action]] void removetoken(const uint64_t id);
[[eosio::action]] void setconfig(const name system_contract,
const name system_contract_msig,
const name system_token_contract,
Expand All @@ -68,18 +56,12 @@ class [[eosio::contract("api")]] api : public contract
const std::vector<token_definition> tokens);
using getbalances_action = action_wrapper<"getbalances"_n, &api::getbalances>;

[[eosio::action, eosio::read_only]] std::vector<token_definition> gettokens();
using gettokens_action = action_wrapper<"gettokens"_n, &api::gettokens>;

#ifdef DEBUG
[[eosio::action]] void wipe();
[[eosio::action]] void reset();
#endif

private:
void add_token(const token_definition token);
std::vector<token_definition> get_token_definitions();

#ifdef DEBUG
template <typename T>
void clear_table(T& table, uint64_t rows_to_clear);
Expand Down
51 changes: 2 additions & 49 deletions contracts/api/src/api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,31 +68,13 @@ namespace api {
.rexfund = rexfund};
}

std::vector<token_definition> api::get_token_definitions()
{
std::vector<token_definition> result;
token_table _tokens(get_self(), get_self().value);
auto token_itr = _tokens.begin();
while (token_itr != _tokens.end()) {
result.push_back({.contract = token_itr->contract, .symbol = token_itr->symbol});
token_itr++;
}
return result;
}

[[eosio::action, eosio::read_only]] std::vector<token_definition> api::gettokens() { return get_token_definitions(); }

[[eosio::action, eosio::read_only]] std::vector<asset> api::getbalances(const name account,
const std::vector<token_definition> tokens)
{
std::vector<asset> balances;
check(tokens.size() > 0, "tokens must not be empty");

std::vector<token_definition> token_definitions = tokens;
if (token_definitions.size() == 0) {
token_definitions = get_token_definitions();
}

for (const auto& token : token_definitions) {
for (const auto& token : tokens) {
eosio::token::accounts _accounts(token.contract, account.value);
auto balance_itr = _accounts.find(token.symbol.code().raw());
if (balance_itr != _accounts.end()) {
Expand All @@ -105,35 +87,6 @@ std::vector<token_definition> api::get_token_definitions()
return balances;
}

void api::add_token(const token_definition token)
{
require_auth(get_self());
token_table tokens(get_self(), get_self().value);
tokens.emplace(get_self(), [&](auto& row) {
row.id = tokens.available_primary_key();
row.contract = token.contract;
row.symbol = token.symbol;
});
}

[[eosio::action]] void api::addtoken(const token_definition token) { add_token(token); }

[[eosio::action]] void api::addtokens(const std::vector<token_definition> tokens)
{
for (const auto& token : tokens) {
add_token(token);
}
}

[[eosio::action]] void api::removetoken(const uint64_t id)
{
require_auth(get_self());
token_table tokens(get_self(), get_self().value);
auto token_itr = tokens.find(id);
check(token_itr != tokens.end(), "token not found");
tokens.erase(token_itr);
}

[[eosio::action]] void api::setconfig(const name system_contract,
const name system_contract_msig,
const name system_token_contract,
Expand Down
5 changes: 3 additions & 2 deletions contracts/api/src/debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ void api::wipe_singletons()

void api::wipe_tables()
{
token_table tokens(get_self(), get_self().value);
clear_table(tokens, -1);
// e.g.
// token_table tokens(get_self(), get_self().value);
// clear_table(tokens, -1);
}

[[eosio::action]] void api::wipe()
Expand Down
66 changes: 1 addition & 65 deletions test/api/api.test.ts
Original file line number Diff line number Diff line change
@@ -1,77 +1,13 @@
import {beforeEach, describe, expect, test} from 'bun:test'

import {apiContract, contracts, resetContracts} from '../helpers'
import {Asset, Name, Serializer} from '@wharfkit/antelope'
import {Asset, Name} from '@wharfkit/antelope'

describe(apiContract, () => {
beforeEach(async () => {
await resetContracts()
})

describe('action::addtoken', () => {
describe('success', () => {
test('add tokens', async () => {
await contracts.api.actions
.addtoken([{contract: 'eosio.token', symbol: '4,EOS'}])
.send()
await contracts.api.actions
.addtoken([{contract: 'scrap', symbol: '0,SCRAP'}])
.send()

const rows = await contracts.api.tables.tokens().getTableRows()
expect(rows).toHaveLength(2)
expect(Serializer.objectify(rows[0])).toMatchSnapshot()
expect(Serializer.objectify(rows[1])).toMatchSnapshot()
})
})
describe('error', () => {
test('require contract auth', async () => {
const action = contracts.api.actions
.addtoken([{contract: 'eosio.token', symbol: '4,EOS'}])
.send('alice')
expect(action).rejects.toThrow('missing required authority api')
})
})
})

describe('action::removetoken', () => {
describe('success', () => {
test('remove tokens', async () => {
await contracts.api.actions
.addtoken([{contract: 'eosio.token', symbol: '4,EOS'}])
.send()
await contracts.api.actions
.addtoken([{contract: 'scrap', symbol: '0,SCRAP'}])
.send()

const rows = await contracts.api.tables.tokens().getTableRows()
expect(rows).toHaveLength(2)
expect(Serializer.objectify(rows[0])).toMatchSnapshot()
expect(Serializer.objectify(rows[1])).toMatchSnapshot()

await contracts.api.actions.removetoken([1]).send()

const rows2 = await contracts.api.tables.tokens().getTableRows()
expect(rows2).toHaveLength(1)
expect(Serializer.objectify(rows[0])).toMatchSnapshot()

await contracts.api.actions.removetoken([0]).send()

const rows3 = await contracts.api.tables.tokens().getTableRows()
expect(rows3).toHaveLength(0)
})
})
describe('error', () => {
test('require contract auth', async () => {
await contracts.api.actions
.addtoken([{contract: 'eosio.token', symbol: '4,EOS'}])
.send()
const action = contracts.api.actions.removetoken([0]).send('alice')
expect(action).rejects.toThrow('missing required authority api')
})
})
})

describe('action::setconfig', () => {
describe('success', () => {
test('set config', async () => {
Expand Down

0 comments on commit ac0f251

Please sign in to comment.