Skip to content

Commit

Permalink
Merge pull request #632 from GolosChain/527-genesis-generate-names
Browse files Browse the repository at this point in the history
Better account_names generation + split genesis-create #527
  • Loading branch information
afalaleev committed May 10, 2019
2 parents 5596bc8 + b648b82 commit 9379882
Show file tree
Hide file tree
Showing 11 changed files with 434 additions and 402 deletions.
26 changes: 13 additions & 13 deletions libraries/chain/eosio_contract_abi.cpp
Expand Up @@ -485,9 +485,9 @@ abi_def eosio_contract_abi(abi_def eos_abi)
{cyberway::chaindb::tag<by_id>::get_code(), true, {{"id", "asc"}}}
}
});

eos_abi.structs.emplace_back( eosio::chain::struct_def {
"agent_struct", "",{
"stake_agent_object", "",{
{"id", "uint64"},
{"token_code", "symbol_code"},
{"account", "name"},
Expand All @@ -503,15 +503,15 @@ abi_def eosio_contract_abi(abi_def eos_abi)
{"signing_key", "public_key"}}});

eos_abi.tables.emplace_back( eosio::chain::table_def {
cyberway::chaindb::tag<stake_agent_object>::get_code(), "agent_struct", {
cyberway::chaindb::tag<stake_agent_object>::get_code(), "stake_agent_object", {
{cyberway::chaindb::tag<by_id>::get_code(), true, {{"id", "asc"}}},
{cyberway::chaindb::tag<stake_agent_object::by_key>::get_code(), true, {{"token_code", "asc"},{"account", "asc"}}},
{cyberway::chaindb::tag<stake_agent_object::by_votes>::get_code(), true, {{"token_code", "asc"},{"votes", "desc"},{"account", "asc"}}}
}
});

eos_abi.structs.emplace_back( eosio::chain::struct_def {
"grant_struct", "",{
"stake_grant_object", "",{
{"id", "uint64"},
{"token_code", "symbol_code"},
{"grantor_name", "name"},
Expand All @@ -520,39 +520,39 @@ abi_def eosio_contract_abi(abi_def eos_abi)
{"share", "int64"},
{"break_fee", "int16"},
{"break_min_own_staked", "int64" }}});

eos_abi.tables.emplace_back( eosio::chain::table_def {
cyberway::chaindb::tag<stake_grant_object>::get_code(), "grant_struct", {
cyberway::chaindb::tag<stake_grant_object>::get_code(), "stake_grant_object", {
{cyberway::chaindb::tag<by_id>::get_code(), true, {{"id", "asc"}}},
{cyberway::chaindb::tag<stake_agent_object::by_key>::get_code(), true,
{{"token_code", "asc"},{"grantor_name", "asc"},{"agent_name", "asc"}}}
}
});

eos_abi.structs.emplace_back( eosio::chain::struct_def {
"param_struct", "",{
"stake_param_object", "",{
{"id", "uint64"},
{"token_symbol", "symbol"},
{"max_proxies", "uint8[]"},
{"payout_step_length", "int64"},
{"payout_steps_num", "uint16"},
{"min_own_staked_for_election", "int64"}}});

eos_abi.tables.emplace_back( eosio::chain::table_def {
cyberway::chaindb::tag<stake_param_object>::get_code(), "param_struct", {
cyberway::chaindb::tag<stake_param_object>::get_code(), "stake_param_object", { // Maybe add "stake_" prefix? it's in cyber.abi namespace
{cyberway::chaindb::tag<by_id>::get_code(), true, {{"id", "asc"}}}}
});

eos_abi.structs.emplace_back( eosio::chain::struct_def {
"stat_struct", "",{
"stake_stat_object", "",{
{"id", "uint64"},
{"token_code", "symbol_code"},
{"total_staked", "int64"},
{"last_reward", "time_point_sec"},
{"enabled", "bool"}}});

eos_abi.tables.emplace_back( eosio::chain::table_def {
cyberway::chaindb::tag<stake_stat_object>::get_code(), "stat_struct", {
cyberway::chaindb::tag<stake_stat_object>::get_code(), "stake_stat_object", {
{cyberway::chaindb::tag<by_id>::get_code(), true, {{"id", "asc"}}}
}
});
Expand Down
Expand Up @@ -22,7 +22,7 @@ struct ee_genesis_serializer {
abi_serializer serializer;

public:
void start(const bfs::path& out_file, const fc::sha256& hash, const abi_def& abi,
void start(const bfs::path& out_file, const fc::sha256& hash, const abi_def& abi,
const fc::microseconds abi_serializer_max_time = fc::seconds(10)) {

out.exceptions(std::ofstream::failbit | std::ofstream::badbit);
Expand Down
Expand Up @@ -18,7 +18,7 @@ struct genesis_header {

uint32_t tables_count;

bool is_valid() {
bool is_valid() const {
genesis_header oth;
return string(magic) == oth.magic && version == oth.version;
}
Expand Down
21 changes: 21 additions & 0 deletions libraries/chain/include/cyberway/genesis/genesis_generate_name.hpp
@@ -0,0 +1,21 @@
#pragma once
#include <eosio/chain/name.hpp>
#include <fc/crypto/sha1.hpp>

namespace cyberway { namespace genesis {

inline eosio::chain::name generate_name(std::string txt) {
auto hash = fc::sha1::hash(txt); // can implement something faster like MurmurHash3, but sha1 looks enough
uint64_t data = ((uint64_t*)(hash.data()))[0];
uint64_t r = 0;
// names are base32 and 0 maps to '.' symbol. to avoid dots transform to base31 and increment each symbol
for (int i = 0; i < 12; i++) {
auto quot = data / 31; // pair with % so compiler can produce 1 op for both div/mod
auto rem = data % 31;
data = quot;
r |= (rem + 1) << (64 - 5 * (i + 1));
}
return eosio::chain::name(r);
}

}} // cyberway::genesis
9 changes: 1 addition & 8 deletions programs/create-genesis-ee/genesis_ee_builder.cpp
@@ -1,5 +1,6 @@
#include "genesis_ee_builder.hpp"
#include "golos_operations.hpp"
#include <cyberway/genesis/genesis_generate_name.hpp>

#define MEGABYTE 1024*1024

Expand Down Expand Up @@ -283,14 +284,6 @@ void genesis_ee_builder::read_operation_dump(const bfs::path& in_dump_dir) {
process_follows();
}

// TODO: Move to common library

account_name generate_name(string n) {
// TODO: replace with better function
// TODO: remove dots from result (+append trailing to length of 12 characters)
uint64_t h = std::hash<std::string>()(n);
return account_name(h & 0xFFFFFFFFFFFFFFF0);
}

void genesis_ee_builder::build_votes(std::vector<vote_info>& votes, uint64_t msg_hash, operation_number msg_created) {
const auto& vote_index = maps_.get_index<vote_header_index, by_hash_voter>();
Expand Down
31 changes: 31 additions & 0 deletions programs/create-genesis/config.hpp
@@ -0,0 +1,31 @@
#pragma once
#include <eosio/chain/name.hpp>


namespace cyberway { namespace genesis {

static constexpr uint64_t gls_issuer_account_name = N(gls.issuer);
static constexpr uint64_t gls_ctrl_account_name = N(gls.ctrl);
static constexpr uint64_t gls_vest_account_name = N(gls.vesting);
static constexpr uint64_t gls_post_account_name = N(gls.publish);
static constexpr uint64_t gls_social_account_name = N(gls.social);
static constexpr uint64_t gls_charge_account_name = N(gls.charge);
constexpr auto notify_account_name = gls_ctrl_account_name;

constexpr auto GBG = SY(3,GBG);
constexpr auto GLS = SY(3,GOLOS);
constexpr auto GESTS = SY(6,GESTS);
constexpr auto VESTS = SY(6,GOLOS); // Golos dApp vesting
constexpr auto posting_auth_name = "posting";
constexpr auto golos_domain_name = "golos";

constexpr auto withdraw_interval_seconds = 60*60*24*7;
constexpr auto withdraw_intervals = 13;

constexpr int64_t system_max_supply = 1'000'000'000ll * 10000; // 4 digits precision
constexpr int64_t golos_max_supply = 1'000'000'000ll * 1000; // 3 digits precision

constexpr int fixp_fract_digits = 12;


}} // cyberway::genesis
2 changes: 1 addition & 1 deletion programs/create-genesis/event_engine_genesis.hpp
Expand Up @@ -13,7 +13,7 @@ class event_engine_genesis final {
public:
event_engine_genesis(const event_engine_genesis&) = delete;
event_engine_genesis();

void start(const bfp::path& ee_directory, const fc::sha256& hash);
void finalize();

Expand Down

0 comments on commit 9379882

Please sign in to comment.