Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
450f9bf5
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
450f9bf5
编写于
5月 31, 2017
作者:
D
Daniel Larimer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
removing old code
上级
98d2ebf1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
0 addition
and
348 deletion
+0
-348
programs/producer_node/CMakeLists.txt
programs/producer_node/CMakeLists.txt
+0
-22
programs/producer_node/main.cpp
programs/producer_node/main.cpp
+0
-303
programs/producer_node/saltpass.py
programs/producer_node/saltpass.py
+0
-23
未找到文件。
programs/producer_node/CMakeLists.txt
已删除
100644 → 0
浏览文件 @
98d2ebf1
add_executable
(
producer_node main.cpp
)
if
(
UNIX AND NOT APPLE
)
set
(
rt_library rt
)
endif
()
find_package
(
Gperftools QUIET
)
if
(
GPERFTOOLS_FOUND
)
message
(
STATUS
"Found gperftools; compiling producer_node with TCMalloc"
)
list
(
APPEND PLATFORM_SPECIFIC_LIBS tcmalloc
)
endif
()
# We have to link against eos_debug_producer because deficiency in our API infrastructure doesn't allow plugins to be fully abstracted #246
target_link_libraries
(
producer_node
PRIVATE eos_app eos_producer eos_chain eos_debug_producer eos_egenesis_full fc
${
CMAKE_DL_LIBS
}
${
PLATFORM_SPECIFIC_LIBS
}
)
install
(
TARGETS
producer_node
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
programs/producer_node/main.cpp
已删除
100644 → 0
浏览文件 @
98d2ebf1
/*
* Copyright (c) 2017, Respective Authors.
*
* The MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <eos/app/application.hpp>
#include <eos/producer/producer.hpp>
#include <fc/exception/exception.hpp>
#include <fc/thread/thread.hpp>
#include <fc/interprocess/signals.hpp>
#include <fc/log/console_appender.hpp>
#include <fc/log/file_appender.hpp>
#include <fc/log/logger.hpp>
#include <fc/log/logger_config.hpp>
#include <boost/filesystem.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <iostream>
#include <fstream>
#ifdef WIN32
# include <signal.h>
#else
# include <csignal>
#endif
using
namespace
eos
;
namespace
bpo
=
boost
::
program_options
;
void
write_default_logging_config_to_stream
(
std
::
ostream
&
out
);
fc
::
optional
<
fc
::
logging_config
>
load_logging_config_from_ini_file
(
const
fc
::
path
&
config_ini_filename
);
int
main
(
int
argc
,
char
**
argv
)
{
app
::
application
*
node
=
new
app
::
application
();
fc
::
oexception
unhandled_exception
;
try
{
bpo
::
options_description
app_options
(
"Eos Producer Node"
);
bpo
::
options_description
cfg_options
(
"Eos Producer Node"
);
app_options
.
add_options
()
(
"help,h"
,
"Print this help message and exit."
)
(
"data-dir,d"
,
bpo
::
value
<
boost
::
filesystem
::
path
>
()
->
default_value
(
"producer_node_data_dir"
),
"Directory containing databases, configuration file, etc."
)
;
bpo
::
variables_map
options
;
auto
producer_plug
=
node
->
register_plugin
<
producer_plugin
::
producer_plugin
>
();
try
{
bpo
::
options_description
cli
,
cfg
;
node
->
set_program_options
(
cli
,
cfg
);
app_options
.
add
(
cli
);
cfg_options
.
add
(
cfg
);
bpo
::
store
(
bpo
::
parse_command_line
(
argc
,
argv
,
app_options
),
options
);
}
catch
(
const
boost
::
program_options
::
error
&
e
)
{
std
::
cerr
<<
"Error parsing command line: "
<<
e
.
what
()
<<
"
\n
"
;
return
1
;
}
if
(
options
.
count
(
"help"
)
)
{
std
::
cout
<<
app_options
<<
"
\n
"
;
return
0
;
}
fc
::
path
data_dir
;
if
(
options
.
count
(
"data-dir"
)
)
{
data_dir
=
options
[
"data-dir"
].
as
<
boost
::
filesystem
::
path
>
();
if
(
data_dir
.
is_relative
()
)
data_dir
=
fc
::
current_path
()
/
data_dir
;
}
fc
::
path
config_ini_path
=
data_dir
/
"config.ini"
;
if
(
fc
::
exists
(
config_ini_path
)
)
{
// get the basic options
bpo
::
store
(
bpo
::
parse_config_file
<
char
>
(
config_ini_path
.
preferred_string
().
c_str
(),
cfg_options
,
true
),
options
);
// try to get logging options from the config file.
try
{
fc
::
optional
<
fc
::
logging_config
>
logging_config
=
load_logging_config_from_ini_file
(
config_ini_path
);
if
(
logging_config
)
fc
::
configure_logging
(
*
logging_config
);
}
catch
(
const
fc
::
exception
&
)
{
wlog
(
"Error parsing logging config from config file ${config}, using default config"
,
(
"config"
,
config_ini_path
.
preferred_string
()));
}
}
else
{
ilog
(
"Writing new config file at ${path}"
,
(
"path"
,
config_ini_path
));
if
(
!
fc
::
exists
(
data_dir
)
)
fc
::
create_directories
(
data_dir
);
std
::
ofstream
out_cfg
(
config_ini_path
.
preferred_string
());
for
(
const
boost
::
shared_ptr
<
bpo
::
option_description
>
od
:
cfg_options
.
options
()
)
{
if
(
!
od
->
description
().
empty
()
)
out_cfg
<<
"# "
<<
od
->
description
()
<<
"
\n
"
;
boost
::
any
store
;
if
(
!
od
->
semantic
()
->
apply_default
(
store
)
)
out_cfg
<<
"# "
<<
od
->
long_name
()
<<
" =
\n
"
;
else
{
auto
example
=
od
->
format_parameter
();
if
(
example
.
empty
()
)
// This is a boolean switch
out_cfg
<<
od
->
long_name
()
<<
" = "
<<
"false
\n
"
;
else
{
// The string is formatted "arg (=<interesting part>)"
example
.
erase
(
0
,
6
);
example
.
erase
(
example
.
length
()
-
1
);
out_cfg
<<
od
->
long_name
()
<<
" = "
<<
example
<<
"
\n
"
;
}
}
out_cfg
<<
"
\n
"
;
}
write_default_logging_config_to_stream
(
out_cfg
);
out_cfg
.
close
();
// read the default logging config we just wrote out to the file and start using it
fc
::
optional
<
fc
::
logging_config
>
logging_config
=
load_logging_config_from_ini_file
(
config_ini_path
);
if
(
logging_config
)
fc
::
configure_logging
(
*
logging_config
);
}
bpo
::
notify
(
options
);
node
->
initialize
(
data_dir
,
options
);
node
->
initialize_plugins
(
options
);
node
->
startup
();
node
->
startup_plugins
();
fc
::
promise
<
int
>::
ptr
exit_promise
=
new
fc
::
promise
<
int
>
(
"UNIX Signal Handler"
);
fc
::
set_signal_handler
([
&
exit_promise
](
int
signal
)
{
elog
(
"Caught SIGINT attempting to exit cleanly"
);
exit_promise
->
set_value
(
signal
);
},
SIGINT
);
fc
::
set_signal_handler
([
&
exit_promise
](
int
signal
)
{
elog
(
"Caught SIGTERM attempting to exit cleanly"
);
exit_promise
->
set_value
(
signal
);
},
SIGTERM
);
ilog
(
"Started producer node on a chain with ${h} blocks."
,
(
"h"
,
node
->
chain_database
()
->
head_block_num
()));
ilog
(
"Chain ID is ${id}"
,
(
"id"
,
node
->
chain_database
()
->
get_chain_id
())
);
int
signal
=
exit_promise
->
wait
();
ilog
(
"Exiting from signal ${n}"
,
(
"n"
,
signal
));
node
->
shutdown_plugins
();
node
->
shutdown
();
delete
node
;
return
0
;
}
catch
(
const
fc
::
exception
&
e
)
{
// deleting the node can yield, so do this outside the exception handler
unhandled_exception
=
e
;
}
if
(
unhandled_exception
)
{
elog
(
"Exiting with error:
\n
${e}"
,
(
"e"
,
unhandled_exception
->
to_detail_string
()));
node
->
shutdown
();
delete
node
;
return
1
;
}
}
// logging config is too complicated to be parsed by boost::program_options,
// so we do it by hand
//
// Currently, you can only specify the filenames and logging levels, which
// are all most users would want to change. At a later time, options can
// be added to control rotation intervals, compression, and other seldom-
// used features
void
write_default_logging_config_to_stream
(
std
::
ostream
&
out
)
{
out
<<
"# declare an appender named
\"
stderr
\"
that writes messages to the console
\n
"
"[log.console_appender.stderr]
\n
"
"stream=std_error
\n\n
"
"# declare an appender named
\"
p2p
\"
that writes messages to p2p.log
\n
"
"[log.file_appender.p2p]
\n
"
"filename=logs/p2p/p2p.log
\n
"
"# filename can be absolute or relative to this config file
\n\n
"
"# route any messages logged to the default logger to the
\"
stderr
\"
logger we
\n
"
"# declared above, if they are info level are higher
\n
"
"[logger.default]
\n
"
"level=info
\n
"
"appenders=stderr
\n\n
"
"# route messages sent to the
\"
p2p
\"
logger to the p2p appender declared above
\n
"
"[logger.p2p]
\n
"
"level=info
\n
"
"appenders=p2p
\n\n
"
;
}
fc
::
optional
<
fc
::
logging_config
>
load_logging_config_from_ini_file
(
const
fc
::
path
&
config_ini_filename
)
{
try
{
fc
::
logging_config
logging_config
;
bool
found_logging_config
=
false
;
boost
::
property_tree
::
ptree
config_ini_tree
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
config_ini_filename
.
preferred_string
().
c_str
(),
config_ini_tree
);
for
(
const
auto
&
section
:
config_ini_tree
)
{
const
std
::
string
&
section_name
=
section
.
first
;
const
boost
::
property_tree
::
ptree
&
section_tree
=
section
.
second
;
const
std
::
string
console_appender_section_prefix
=
"log.console_appender."
;
const
std
::
string
file_appender_section_prefix
=
"log.file_appender."
;
const
std
::
string
logger_section_prefix
=
"logger."
;
if
(
boost
::
starts_with
(
section_name
,
console_appender_section_prefix
))
{
std
::
string
console_appender_name
=
section_name
.
substr
(
console_appender_section_prefix
.
length
());
std
::
string
stream_name
=
section_tree
.
get
<
std
::
string
>
(
"stream"
);
// construct a default console appender config here
// stdout/stderr will be taken from ini file, everything else hard-coded here
fc
::
console_appender
::
config
console_appender_config
;
console_appender_config
.
level_colors
.
emplace_back
(
fc
::
console_appender
::
level_color
(
fc
::
log_level
::
debug
,
fc
::
console_appender
::
color
::
green
));
console_appender_config
.
level_colors
.
emplace_back
(
fc
::
console_appender
::
level_color
(
fc
::
log_level
::
warn
,
fc
::
console_appender
::
color
::
brown
));
console_appender_config
.
level_colors
.
emplace_back
(
fc
::
console_appender
::
level_color
(
fc
::
log_level
::
error
,
fc
::
console_appender
::
color
::
cyan
));
console_appender_config
.
stream
=
fc
::
variant
(
stream_name
).
as
<
fc
::
console_appender
::
stream
::
type
>
();
logging_config
.
appenders
.
push_back
(
fc
::
appender_config
(
console_appender_name
,
"console"
,
fc
::
variant
(
console_appender_config
)));
found_logging_config
=
true
;
}
else
if
(
boost
::
starts_with
(
section_name
,
file_appender_section_prefix
))
{
std
::
string
file_appender_name
=
section_name
.
substr
(
file_appender_section_prefix
.
length
());
fc
::
path
file_name
=
section_tree
.
get
<
std
::
string
>
(
"filename"
);
if
(
file_name
.
is_relative
())
file_name
=
fc
::
absolute
(
config_ini_filename
).
parent_path
()
/
file_name
;
// construct a default file appender config here
// filename will be taken from ini file, everything else hard-coded here
fc
::
file_appender
::
config
file_appender_config
;
file_appender_config
.
filename
=
file_name
;
file_appender_config
.
flush
=
true
;
file_appender_config
.
rotate
=
true
;
file_appender_config
.
rotation_interval
=
fc
::
hours
(
1
);
file_appender_config
.
rotation_limit
=
fc
::
days
(
1
);
logging_config
.
appenders
.
push_back
(
fc
::
appender_config
(
file_appender_name
,
"file"
,
fc
::
variant
(
file_appender_config
)));
found_logging_config
=
true
;
}
else
if
(
boost
::
starts_with
(
section_name
,
logger_section_prefix
))
{
std
::
string
logger_name
=
section_name
.
substr
(
logger_section_prefix
.
length
());
std
::
string
level_string
=
section_tree
.
get
<
std
::
string
>
(
"level"
);
std
::
string
appenders_string
=
section_tree
.
get
<
std
::
string
>
(
"appenders"
);
fc
::
logger_config
logger_config
(
logger_name
);
logger_config
.
level
=
fc
::
variant
(
level_string
).
as
<
fc
::
log_level
>
();
boost
::
split
(
logger_config
.
appenders
,
appenders_string
,
boost
::
is_any_of
(
" ,"
),
boost
::
token_compress_on
);
logging_config
.
loggers
.
push_back
(
logger_config
);
found_logging_config
=
true
;
}
}
if
(
found_logging_config
)
return
logging_config
;
else
return
fc
::
optional
<
fc
::
logging_config
>
();
}
FC_RETHROW_EXCEPTIONS
(
warn
,
""
)
}
programs/producer_node/saltpass.py
已删除
100755 → 0
浏览文件 @
98d2ebf1
#!/usr/bin/env python3
import
base64
import
getpass
import
hashlib
import
json
import
os
pw
=
getpass
.
getpass
(
"enter your password: "
)
pw_bytes
=
pw
.
encode
(
"utf-8"
)
salt_bytes
=
os
.
urandom
(
8
)
salt_b64
=
base64
.
b64encode
(
salt_bytes
)
pw_hash
=
hashlib
.
sha256
(
pw_bytes
+
salt_bytes
).
digest
()
pw_hash_b64
=
base64
.
b64encode
(
pw_hash
)
print
(
json
.
dumps
(
{
"password_hash_b64"
:
pw_hash_b64
.
decode
(
"ascii"
),
"password_salt_b64"
:
salt_b64
.
decode
(
"ascii"
),
},
sort_keys
=
True
,
indent
=
3
,
separators
=
(
','
,
' : '
)
))
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录