EOS是一个去中心化的操作系统。专为高性能去中心化应用而设计。EOS提供了数据库,许可,调度,验证以及应用间通信等功能。
怎么理解其账户体系 ?参考此文
// create key
create->add_subcommand("key", localized("Create a new keypair and print the public and private keys"))->set_callback([] {
auto privateKey = fc::ecc::private_key::generate();
std::cout << localized("Private key: ${key}", ("key", key_to_wif(privateKey.get_secret()))) << std::endl;
std::cout << localized("Public key: ${key}", ("key", string(public_key_type(privateKey.get_public_key())))) << std::endl;
});
注意这里用了两个key对,一个是冷备的owner所有者但是不管事;另一个是active,具体干活,但是不拥有
用了libraries目录下fc这个包的ecc(椭圆曲线)的方法
如下这个private_key类就是定义的类,还要看实现
如上只是定义,真正实现在elliptic_impl_priv.cpp中
public_key private_key::get_public_key()const
{
FC_ASSERT( my->_key != empty_priv );
public_key_data pub;
unsigned int pk_len;
FC_ASSERT( secp256k1_ec_pubkey_create( detail::_get_context(), (unsigned char*) pub.begin(), (int*) &pk_len, (unsigned char*) my->_key.data(), 1 ) );
FC_ASSERT( pk_len == pub.size() );
return public_key(pub);
}
里面调用了public_key.cpp的初始化函数:
//里面pubkey的前缀固定是EOS
#define KEY_PREFIX "EOS"
//生成public
public_key::public_key( const public_key_data& dat )
{
const char* front = &dat.data[0];
if( *front == 0 ){}
else
{
my->_key = EC_KEY_new_by_curve_name( NID_secp256k1 );
my->_key = o2i_ECPublicKey( &my->_key, (const unsigned char**)&front, sizeof(public_key_data) );
if( !my->_key )
{
FC_THROW_EXCEPTION( exception, "error decoding public key", ("s", ERR_error_string( ERR_get_error(), nullptr) ) );
}
}
}
绝不能联网,我运行这个html是本地编辑好了,然后拔掉网线关掉wifi运行的(防止泄露,保证安全)
git clone https://github.com/EOSIO/eosjs-ecc.git
cd eosjs-ecc
npm install
npm run build_browser