HARDFORK Allow digits in asset name; fix #359
This commit is contained in:
parent
0106a896dc
commit
9b910ee1a4
4 changed files with 75 additions and 2 deletions
|
|
@ -21,14 +21,64 @@
|
||||||
#include <graphene/chain/market_evaluator.hpp>
|
#include <graphene/chain/market_evaluator.hpp>
|
||||||
#include <graphene/chain/database.hpp>
|
#include <graphene/chain/database.hpp>
|
||||||
#include <graphene/chain/exceptions.hpp>
|
#include <graphene/chain/exceptions.hpp>
|
||||||
|
#include <graphene/chain/hardfork.hpp>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace graphene { namespace chain {
|
namespace graphene { namespace chain {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Valid symbols can contain [A-Z0-9], and '.'
|
||||||
|
* They must start with [A, Z]
|
||||||
|
* They must end with [A, Z]
|
||||||
|
* They can contain a maximum of one '.'
|
||||||
|
*/
|
||||||
|
bool is_valid_symbol_old( const string& symbol )
|
||||||
|
{
|
||||||
|
if( symbol.size() < GRAPHENE_MIN_ASSET_SYMBOL_LENGTH )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( symbol.size() > GRAPHENE_MAX_ASSET_SYMBOL_LENGTH )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( !isalpha( symbol.front() ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( !isalpha( symbol.back() ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool dot_already_present = false;
|
||||||
|
for( const auto c : symbol )
|
||||||
|
{
|
||||||
|
if( (isalpha( c ) || isdigit(c)) && isupper( c ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if( c == '.' )
|
||||||
|
{
|
||||||
|
if( dot_already_present )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
dot_already_present = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void_result asset_create_evaluator::do_evaluate( const asset_create_operation& op )
|
void_result asset_create_evaluator::do_evaluate( const asset_create_operation& op )
|
||||||
{ try {
|
{ try {
|
||||||
|
|
||||||
database& d = db();
|
database& d = db();
|
||||||
|
|
||||||
|
#warning HARDFORK remove this check after HARDFORK_359_TIME and rename is_valid_symbol_old -> is_valid_symbol
|
||||||
|
if( d.head_block_time() <= HARDFORK_359_TIME )
|
||||||
|
{
|
||||||
|
FC_ASSERT( is_valid_symbol_old( op.symbol ) );
|
||||||
|
}
|
||||||
|
|
||||||
const auto& chain_parameters = d.get_global_properties().parameters;
|
const auto& chain_parameters = d.get_global_properties().parameters;
|
||||||
FC_ASSERT( op.common_options.whitelist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
FC_ASSERT( op.common_options.whitelist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
||||||
FC_ASSERT( op.common_options.blacklist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
FC_ASSERT( op.common_options.blacklist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
||||||
|
|
|
||||||
20
libraries/chain/include/graphene/chain/hardfork.hpp
Normal file
20
libraries/chain/include/graphene/chain/hardfork.hpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015, Cryptonomex, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is provided for evaluation in private test networks only, until September 8, 2015. After this date, this license expires and
|
||||||
|
* the code may not be used, modified or distributed for any purpose. Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted until September 8, 2015, provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. The code and/or derivative works are used only for private test networks consisting of no more than 10 P2P nodes.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define HARDFORK_359_TIME (fc::time_point_sec( 1444416300 ))
|
||||||
|
|
@ -25,7 +25,7 @@ bool is_valid_symbol( const string& symbol )
|
||||||
bool dot_already_present = false;
|
bool dot_already_present = false;
|
||||||
for( const auto c : symbol )
|
for( const auto c : symbol )
|
||||||
{
|
{
|
||||||
if( (isalpha( c ) || isdigit(c)) && isupper( c ) )
|
if( (isalpha( c ) && isupper( c )) || isdigit(c) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( c == '.' )
|
if( c == '.' )
|
||||||
|
|
@ -42,6 +42,7 @@ bool is_valid_symbol( const string& symbol )
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
share_type asset_issue_operation::calculate_fee(const fee_parameters_type& k)const
|
share_type asset_issue_operation::calculate_fee(const fee_parameters_type& k)const
|
||||||
{
|
{
|
||||||
return k.fee + calculate_data_fee( fc::raw::pack_size(memo), k.price_per_kbyte );
|
return k.fee + calculate_data_fee( fc::raw::pack_size(memo), k.price_per_kbyte );
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ BOOST_AUTO_TEST_CASE( valid_symbol_test )
|
||||||
|
|
||||||
BOOST_CHECK( is_valid_symbol( "AAA" ) );
|
BOOST_CHECK( is_valid_symbol( "AAA" ) );
|
||||||
BOOST_CHECK( !is_valid_symbol( "AaA" ) );
|
BOOST_CHECK( !is_valid_symbol( "AaA" ) );
|
||||||
BOOST_CHECK( !is_valid_symbol( "A0A" ) );
|
BOOST_CHECK( is_valid_symbol( "A0A" ) );
|
||||||
BOOST_CHECK( is_valid_symbol( "A.A" ) );
|
BOOST_CHECK( is_valid_symbol( "A.A" ) );
|
||||||
|
|
||||||
BOOST_CHECK( !is_valid_symbol( "A..A" ) );
|
BOOST_CHECK( !is_valid_symbol( "A..A" ) );
|
||||||
|
|
@ -126,6 +126,8 @@ BOOST_AUTO_TEST_CASE( valid_symbol_test )
|
||||||
BOOST_CHECK( !is_valid_symbol( "AAAAAAAAAAAAAAAAA" ) );
|
BOOST_CHECK( !is_valid_symbol( "AAAAAAAAAAAAAAAAA" ) );
|
||||||
BOOST_CHECK( is_valid_symbol( "A.AAAAAAAAAAAAAA" ) );
|
BOOST_CHECK( is_valid_symbol( "A.AAAAAAAAAAAAAA" ) );
|
||||||
BOOST_CHECK( !is_valid_symbol( "A.AAAAAAAAAAAA.A" ) );
|
BOOST_CHECK( !is_valid_symbol( "A.AAAAAAAAAAAA.A" ) );
|
||||||
|
|
||||||
|
BOOST_CHECK( is_valid_symbol( "AAA000AAA" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE( price_test )
|
BOOST_AUTO_TEST_CASE( price_test )
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue