Testnet Beatrice release June 2021
This commit is contained in:
parent
d3a3722c1e
commit
0a5e3d7080
17 changed files with 454 additions and 237 deletions
|
|
@ -29,6 +29,18 @@ build:
|
||||||
tags:
|
tags:
|
||||||
- builder
|
- builder
|
||||||
|
|
||||||
|
dockerize:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- docker build . -t $DOCKER_REPO:$CI_COMMIT_REF_NAME
|
||||||
|
- docker login -u $DOCKER_USER -p $DOCKER_PASS
|
||||||
|
- docker push $DOCKER_REPO:$CI_COMMIT_REF_NAME
|
||||||
|
- docker logout
|
||||||
|
tags:
|
||||||
|
- builder
|
||||||
|
when: manual
|
||||||
|
timeout: 3h
|
||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
sonar.projectKey=peerplays-network_peerplays
|
||||||
|
sonar.organization=peerplays-network
|
||||||
|
|
||||||
|
# This is the name and version displayed in the SonarCloud UI.
|
||||||
|
sonar.projectName=peerplays
|
||||||
|
|
||||||
|
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
||||||
|
sonar.sources=.
|
||||||
|
|
||||||
|
sonar.host.url=https://sonarcloud.io
|
||||||
343
Doxyfile
343
Doxyfile
|
|
@ -1,4 +1,4 @@
|
||||||
# Doxyfile 1.8.9.1
|
# Doxyfile 1.8.17
|
||||||
|
|
||||||
# This file describes the settings to be used by the documentation system
|
# This file describes the settings to be used by the documentation system
|
||||||
# doxygen (www.doxygen.org) for a project.
|
# doxygen (www.doxygen.org) for a project.
|
||||||
|
|
@ -17,11 +17,11 @@
|
||||||
# Project related configuration options
|
# Project related configuration options
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
# This tag specifies the encoding used for all characters in the config file
|
# This tag specifies the encoding used for all characters in the configuration
|
||||||
# that follow. The default is UTF-8 which is also the encoding used for all text
|
# file that follow. The default is UTF-8 which is also the encoding used for all
|
||||||
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
|
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
|
||||||
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
|
# iconv built into libc) for the transcoding. See
|
||||||
# for the list of possible encodings.
|
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
|
||||||
# The default value is: UTF-8.
|
# The default value is: UTF-8.
|
||||||
|
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
|
|
@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO
|
||||||
|
|
||||||
OUTPUT_LANGUAGE = English
|
OUTPUT_LANGUAGE = English
|
||||||
|
|
||||||
|
# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
|
||||||
|
# documentation generated by doxygen is written. Doxygen will use this
|
||||||
|
# information to generate all generated output in the proper direction.
|
||||||
|
# Possible values are: None, LTR, RTL and Context.
|
||||||
|
# The default value is: None.
|
||||||
|
|
||||||
|
OUTPUT_TEXT_DIRECTION = None
|
||||||
|
|
||||||
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
|
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
|
||||||
# descriptions after the members that are listed in the file and class
|
# descriptions after the members that are listed in the file and class
|
||||||
# documentation (similar to Javadoc). Set to NO to disable this.
|
# documentation (similar to Javadoc). Set to NO to disable this.
|
||||||
|
|
@ -179,6 +187,16 @@ SHORT_NAMES = NO
|
||||||
|
|
||||||
JAVADOC_AUTOBRIEF = NO
|
JAVADOC_AUTOBRIEF = NO
|
||||||
|
|
||||||
|
# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
|
||||||
|
# such as
|
||||||
|
# /***************
|
||||||
|
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
|
||||||
|
# Javadoc-style will behave just like regular comments and it will not be
|
||||||
|
# interpreted by doxygen.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
JAVADOC_BANNER = NO
|
||||||
|
|
||||||
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
|
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
|
||||||
# line (until the first dot) of a Qt-style comment as the brief description. If
|
# line (until the first dot) of a Qt-style comment as the brief description. If
|
||||||
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
|
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
|
||||||
|
|
@ -226,7 +244,12 @@ TAB_SIZE = 4
|
||||||
# will allow you to put the command \sideeffect (or @sideeffect) in the
|
# will allow you to put the command \sideeffect (or @sideeffect) in the
|
||||||
# documentation, which will result in a user-defined paragraph with heading
|
# documentation, which will result in a user-defined paragraph with heading
|
||||||
# "Side Effects:". You can put \n's in the value part of an alias to insert
|
# "Side Effects:". You can put \n's in the value part of an alias to insert
|
||||||
# newlines.
|
# newlines (in the resulting output). You can put ^^ in the value part of an
|
||||||
|
# alias to insert a newline as if a physical newline was in the original file.
|
||||||
|
# When you need a literal { or } or , in the value part of an alias you have to
|
||||||
|
# escape them by means of a backslash (\), this can lead to conflicts with the
|
||||||
|
# commands \{ and \} for these it is advised to use the version @{ and @} or use
|
||||||
|
# a double escape (\\{ and \\})
|
||||||
|
|
||||||
ALIASES =
|
ALIASES =
|
||||||
|
|
||||||
|
|
@ -264,17 +287,26 @@ OPTIMIZE_FOR_FORTRAN = NO
|
||||||
|
|
||||||
OPTIMIZE_OUTPUT_VHDL = NO
|
OPTIMIZE_OUTPUT_VHDL = NO
|
||||||
|
|
||||||
|
# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
|
||||||
|
# sources only. Doxygen will then generate output that is more tailored for that
|
||||||
|
# language. For instance, namespaces will be presented as modules, types will be
|
||||||
|
# separated into more groups, etc.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
OPTIMIZE_OUTPUT_SLICE = NO
|
||||||
|
|
||||||
# Doxygen selects the parser to use depending on the extension of the files it
|
# Doxygen selects the parser to use depending on the extension of the files it
|
||||||
# parses. With this tag you can assign which parser to use for a given
|
# parses. With this tag you can assign which parser to use for a given
|
||||||
# extension. Doxygen has a built-in mapping, but you can override or extend it
|
# extension. Doxygen has a built-in mapping, but you can override or extend it
|
||||||
# using this tag. The format is ext=language, where ext is a file extension, and
|
# using this tag. The format is ext=language, where ext is a file extension, and
|
||||||
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
|
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
|
||||||
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
|
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
|
||||||
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
|
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
|
||||||
# Fortran. In the later case the parser tries to guess whether the code is fixed
|
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
|
||||||
# or free formatted code, this is the default for Fortran type files), VHDL. For
|
# tries to guess whether the code is fixed or free formatted code, this is the
|
||||||
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
|
# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
|
||||||
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
|
# .inc files as Fortran files (default is PHP), and .f files as C (default is
|
||||||
|
# Fortran), use: inc=Fortran f=C.
|
||||||
#
|
#
|
||||||
# Note: For files without extension you can use no_extension as a placeholder.
|
# Note: For files without extension you can use no_extension as a placeholder.
|
||||||
#
|
#
|
||||||
|
|
@ -285,7 +317,7 @@ EXTENSION_MAPPING =
|
||||||
|
|
||||||
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
||||||
# according to the Markdown format, which allows for more readable
|
# according to the Markdown format, which allows for more readable
|
||||||
# documentation. See http://daringfireball.net/projects/markdown/ for details.
|
# documentation. See https://daringfireball.net/projects/markdown/ for details.
|
||||||
# The output of markdown processing is further processed by doxygen, so you can
|
# The output of markdown processing is further processed by doxygen, so you can
|
||||||
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
|
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
|
||||||
# case of backward compatibilities issues.
|
# case of backward compatibilities issues.
|
||||||
|
|
@ -293,6 +325,15 @@ EXTENSION_MAPPING =
|
||||||
|
|
||||||
MARKDOWN_SUPPORT = YES
|
MARKDOWN_SUPPORT = YES
|
||||||
|
|
||||||
|
# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
|
||||||
|
# to that level are automatically included in the table of contents, even if
|
||||||
|
# they do not have an id attribute.
|
||||||
|
# Note: This feature currently applies only to Markdown headings.
|
||||||
|
# Minimum value: 0, maximum value: 99, default value: 5.
|
||||||
|
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
|
||||||
|
|
||||||
|
TOC_INCLUDE_HEADINGS = 5
|
||||||
|
|
||||||
# When enabled doxygen tries to link words that correspond to documented
|
# When enabled doxygen tries to link words that correspond to documented
|
||||||
# classes, or namespaces to their corresponding documentation. Such a link can
|
# classes, or namespaces to their corresponding documentation. Such a link can
|
||||||
# be prevented in individual cases by putting a % sign in front of the word or
|
# be prevented in individual cases by putting a % sign in front of the word or
|
||||||
|
|
@ -318,7 +359,7 @@ BUILTIN_STL_SUPPORT = NO
|
||||||
CPP_CLI_SUPPORT = NO
|
CPP_CLI_SUPPORT = NO
|
||||||
|
|
||||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
|
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
|
||||||
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
|
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
|
||||||
# will parse them like normal C++ but will assume all classes use public instead
|
# will parse them like normal C++ but will assume all classes use public instead
|
||||||
# of private inheritance when no explicit protection keyword is present.
|
# of private inheritance when no explicit protection keyword is present.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
@ -343,6 +384,13 @@ IDL_PROPERTY_SUPPORT = YES
|
||||||
|
|
||||||
DISTRIBUTE_GROUP_DOC = NO
|
DISTRIBUTE_GROUP_DOC = NO
|
||||||
|
|
||||||
|
# If one adds a struct or class to a group and this option is enabled, then also
|
||||||
|
# any nested class or struct is added to the same group. By default this option
|
||||||
|
# is disabled and one has to add nested compounds explicitly via \ingroup.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
GROUP_NESTED_COMPOUNDS = NO
|
||||||
|
|
||||||
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
|
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
|
||||||
# (for instance a group of public functions) to be put as a subgroup of that
|
# (for instance a group of public functions) to be put as a subgroup of that
|
||||||
# type (e.g. under the Public Functions section). Set it to NO to prevent
|
# type (e.g. under the Public Functions section). Set it to NO to prevent
|
||||||
|
|
@ -417,6 +465,12 @@ EXTRACT_ALL = YES
|
||||||
|
|
||||||
EXTRACT_PRIVATE = NO
|
EXTRACT_PRIVATE = NO
|
||||||
|
|
||||||
|
# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
|
||||||
|
# methods of a class will be included in the documentation.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
EXTRACT_PRIV_VIRTUAL = NO
|
||||||
|
|
||||||
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
|
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
|
||||||
# scope will be included in the documentation.
|
# scope will be included in the documentation.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
@ -471,8 +525,8 @@ HIDE_UNDOC_MEMBERS = NO
|
||||||
HIDE_UNDOC_CLASSES = NO
|
HIDE_UNDOC_CLASSES = NO
|
||||||
|
|
||||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
|
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
|
||||||
# (class|struct|union) declarations. If set to NO, these declarations will be
|
# declarations. If set to NO, these declarations will be included in the
|
||||||
# included in the documentation.
|
# documentation.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
HIDE_FRIEND_COMPOUNDS = NO
|
HIDE_FRIEND_COMPOUNDS = NO
|
||||||
|
|
@ -495,7 +549,7 @@ INTERNAL_DOCS = NO
|
||||||
# names in lower-case letters. If set to YES, upper-case letters are also
|
# names in lower-case letters. If set to YES, upper-case letters are also
|
||||||
# allowed. This is useful if you have classes or files whose names only differ
|
# allowed. This is useful if you have classes or files whose names only differ
|
||||||
# in case and if your file system supports case sensitive file names. Windows
|
# in case and if your file system supports case sensitive file names. Windows
|
||||||
# and Mac users are advised to set this option to NO.
|
# (including Cygwin) ands Mac users are advised to set this option to NO.
|
||||||
# The default value is: system dependent.
|
# The default value is: system dependent.
|
||||||
|
|
||||||
CASE_SENSE_NAMES = NO
|
CASE_SENSE_NAMES = NO
|
||||||
|
|
@ -682,7 +736,7 @@ LAYOUT_FILE =
|
||||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||||
# the reference definitions. This must be a list of .bib files. The .bib
|
# the reference definitions. This must be a list of .bib files. The .bib
|
||||||
# extension is automatically appended if omitted. This requires the bibtex tool
|
# extension is automatically appended if omitted. This requires the bibtex tool
|
||||||
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
|
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
|
||||||
# For LaTeX the style of the bibliography can be controlled using
|
# For LaTeX the style of the bibliography can be controlled using
|
||||||
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
||||||
# search path. See also \cite for info how to create references.
|
# search path. See also \cite for info how to create references.
|
||||||
|
|
@ -727,11 +781,18 @@ WARN_IF_DOC_ERROR = YES
|
||||||
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
||||||
# are documented, but have no documentation for their parameters or return
|
# are documented, but have no documentation for their parameters or return
|
||||||
# value. If set to NO, doxygen will only warn about wrong or incomplete
|
# value. If set to NO, doxygen will only warn about wrong or incomplete
|
||||||
# parameter documentation, but not about the absence of documentation.
|
# parameter documentation, but not about the absence of documentation. If
|
||||||
|
# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
WARN_NO_PARAMDOC = NO
|
WARN_NO_PARAMDOC = NO
|
||||||
|
|
||||||
|
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
|
||||||
|
# a warning is encountered.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
WARN_AS_ERROR = NO
|
||||||
|
|
||||||
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
|
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
|
||||||
# can produce. The string should contain the $file, $line, and $text tags, which
|
# can produce. The string should contain the $file, $line, and $text tags, which
|
||||||
# will be replaced by the file and line number from which the warning originated
|
# will be replaced by the file and line number from which the warning originated
|
||||||
|
|
@ -755,15 +816,19 @@ WARN_LOGFILE =
|
||||||
# The INPUT tag is used to specify the files and/or directories that contain
|
# The INPUT tag is used to specify the files and/or directories that contain
|
||||||
# documented source files. You may enter file names like myfile.cpp or
|
# documented source files. You may enter file names like myfile.cpp or
|
||||||
# directories like /usr/src/myproject. Separate the files or directories with
|
# directories like /usr/src/myproject. Separate the files or directories with
|
||||||
# spaces.
|
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||||
# Note: If this tag is empty the current directory is searched.
|
# Note: If this tag is empty the current directory is searched.
|
||||||
|
|
||||||
INPUT = doc/main.dox libraries/chain libraries/chain/db libraries/app libraries/wallet
|
INPUT = doc/main.dox \
|
||||||
|
libraries/chain \
|
||||||
|
libraries/chain/db \
|
||||||
|
libraries/app \
|
||||||
|
libraries/wallet
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
||||||
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
|
# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
|
||||||
# possible encodings.
|
# possible encodings.
|
||||||
# The default value is: UTF-8.
|
# The default value is: UTF-8.
|
||||||
|
|
||||||
|
|
@ -771,12 +836,19 @@ INPUT_ENCODING = UTF-8
|
||||||
|
|
||||||
# If the value of the INPUT tag contains directories, you can use the
|
# If the value of the INPUT tag contains directories, you can use the
|
||||||
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
|
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
|
||||||
# *.h) to filter out the source-files in the directories. If left blank the
|
# *.h) to filter out the source-files in the directories.
|
||||||
# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
|
#
|
||||||
# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
|
# Note that for custom extensions or not directly supported extensions you also
|
||||||
# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
|
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||||
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
|
# read by doxygen.
|
||||||
# *.qsf, *.as and *.js.
|
#
|
||||||
|
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
|
||||||
|
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
|
||||||
|
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
|
||||||
|
# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
|
||||||
|
# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
|
||||||
|
# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd,
|
||||||
|
# *.vhdl, *.ucf, *.qsf and *.ice.
|
||||||
|
|
||||||
FILE_PATTERNS =
|
FILE_PATTERNS =
|
||||||
|
|
||||||
|
|
@ -862,6 +934,10 @@ IMAGE_PATH =
|
||||||
# Note that the filter must not add or remove lines; it is applied before the
|
# Note that the filter must not add or remove lines; it is applied before the
|
||||||
# code is scanned, but not when the output code is generated. If lines are added
|
# code is scanned, but not when the output code is generated. If lines are added
|
||||||
# or removed, the anchors will not be placed correctly.
|
# or removed, the anchors will not be placed correctly.
|
||||||
|
#
|
||||||
|
# Note that for custom extensions or not directly supported extensions you also
|
||||||
|
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||||
|
# properly processed by doxygen.
|
||||||
|
|
||||||
INPUT_FILTER =
|
INPUT_FILTER =
|
||||||
|
|
||||||
|
|
@ -871,6 +947,10 @@ INPUT_FILTER =
|
||||||
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
|
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
|
||||||
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
|
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
|
||||||
# patterns match the file name, INPUT_FILTER is applied.
|
# patterns match the file name, INPUT_FILTER is applied.
|
||||||
|
#
|
||||||
|
# Note that for custom extensions or not directly supported extensions you also
|
||||||
|
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||||
|
# properly processed by doxygen.
|
||||||
|
|
||||||
FILTER_PATTERNS =
|
FILTER_PATTERNS =
|
||||||
|
|
||||||
|
|
@ -923,7 +1003,7 @@ INLINE_SOURCES = NO
|
||||||
STRIP_CODE_COMMENTS = YES
|
STRIP_CODE_COMMENTS = YES
|
||||||
|
|
||||||
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
|
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
|
||||||
# function all documented functions referencing it will be listed.
|
# entity all documented functions referencing it will be listed.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
REFERENCED_BY_RELATION = NO
|
REFERENCED_BY_RELATION = NO
|
||||||
|
|
@ -955,12 +1035,12 @@ SOURCE_TOOLTIPS = YES
|
||||||
# If the USE_HTAGS tag is set to YES then the references to source code will
|
# If the USE_HTAGS tag is set to YES then the references to source code will
|
||||||
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
|
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
|
||||||
# source browser. The htags tool is part of GNU's global source tagging system
|
# source browser. The htags tool is part of GNU's global source tagging system
|
||||||
# (see http://www.gnu.org/software/global/global.html). You will need version
|
# (see https://www.gnu.org/software/global/global.html). You will need version
|
||||||
# 4.8.6 or higher.
|
# 4.8.6 or higher.
|
||||||
#
|
#
|
||||||
# To use it do the following:
|
# To use it do the following:
|
||||||
# - Install the latest version of global
|
# - Install the latest version of global
|
||||||
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
|
# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
|
||||||
# - Make sure the INPUT points to the root of the source tree
|
# - Make sure the INPUT points to the root of the source tree
|
||||||
# - Run doxygen as normal
|
# - Run doxygen as normal
|
||||||
#
|
#
|
||||||
|
|
@ -982,6 +1062,35 @@ USE_HTAGS = NO
|
||||||
|
|
||||||
VERBATIM_HEADERS = YES
|
VERBATIM_HEADERS = YES
|
||||||
|
|
||||||
|
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
|
||||||
|
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
|
||||||
|
# cost of reduced performance. This can be particularly helpful with template
|
||||||
|
# rich C++ code for which doxygen's built-in parser lacks the necessary type
|
||||||
|
# information.
|
||||||
|
# Note: The availability of this option depends on whether or not doxygen was
|
||||||
|
# generated with the -Duse_libclang=ON option for CMake.
|
||||||
|
# The default value is: NO.
|
||||||
|
|
||||||
|
CLANG_ASSISTED_PARSING = NO
|
||||||
|
|
||||||
|
# If clang assisted parsing is enabled you can provide the compiler with command
|
||||||
|
# line options that you would normally use when invoking the compiler. Note that
|
||||||
|
# the include paths will already be set by doxygen for the files and directories
|
||||||
|
# specified with INPUT and INCLUDE_PATH.
|
||||||
|
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
|
||||||
|
|
||||||
|
CLANG_OPTIONS =
|
||||||
|
|
||||||
|
# If clang assisted parsing is enabled you can provide the clang parser with the
|
||||||
|
# path to the compilation database (see:
|
||||||
|
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files
|
||||||
|
# were built. This is equivalent to specifying the "-p" option to a clang tool,
|
||||||
|
# such as clang-check. These options will then be passed to the parser.
|
||||||
|
# Note: The availability of this option depends on whether or not doxygen was
|
||||||
|
# generated with the -Duse_libclang=ON option for CMake.
|
||||||
|
|
||||||
|
CLANG_DATABASE_PATH =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the alphabetical class index
|
# Configuration options related to the alphabetical class index
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
@ -1100,7 +1209,7 @@ HTML_EXTRA_FILES =
|
||||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||||
# will adjust the colors in the style sheet and background images according to
|
# will adjust the colors in the style sheet and background images according to
|
||||||
# this color. Hue is specified as an angle on a colorwheel, see
|
# this color. Hue is specified as an angle on a colorwheel, see
|
||||||
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
|
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
|
||||||
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
|
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
|
||||||
# purple, and 360 is red again.
|
# purple, and 360 is red again.
|
||||||
# Minimum value: 0, maximum value: 359, default value: 220.
|
# Minimum value: 0, maximum value: 359, default value: 220.
|
||||||
|
|
@ -1129,12 +1238,24 @@ HTML_COLORSTYLE_GAMMA = 80
|
||||||
|
|
||||||
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
|
||||||
# page will contain the date and time when the page was generated. Setting this
|
# page will contain the date and time when the page was generated. Setting this
|
||||||
# to NO can help when comparing the output of multiple runs.
|
# to YES can help to show when doxygen was last run and thus if the
|
||||||
# The default value is: YES.
|
# documentation is up to date.
|
||||||
|
# The default value is: NO.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_TIMESTAMP = YES
|
HTML_TIMESTAMP = YES
|
||||||
|
|
||||||
|
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
||||||
|
# documentation will contain a main index with vertical navigation menus that
|
||||||
|
# are dynamically created via JavaScript. If disabled, the navigation index will
|
||||||
|
# consists of multiple levels of tabs that are statically embedded in every HTML
|
||||||
|
# page. Disable this option to support browsers that do not have JavaScript,
|
||||||
|
# like the Qt help browser.
|
||||||
|
# The default value is: YES.
|
||||||
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
|
HTML_DYNAMIC_MENUS = YES
|
||||||
|
|
||||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
||||||
# documentation will contain sections that can be hidden and shown after the
|
# documentation will contain sections that can be hidden and shown after the
|
||||||
# page has loaded.
|
# page has loaded.
|
||||||
|
|
@ -1158,13 +1279,13 @@ HTML_INDEX_NUM_ENTRIES = 100
|
||||||
|
|
||||||
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
||||||
# generated that can be used as input for Apple's Xcode 3 integrated development
|
# generated that can be used as input for Apple's Xcode 3 integrated development
|
||||||
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
|
# environment (see: https://developer.apple.com/xcode/), introduced with OSX
|
||||||
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
|
# 10.5 (Leopard). To create a documentation set, doxygen will generate a
|
||||||
# Makefile in the HTML output directory. Running make will produce the docset in
|
# Makefile in the HTML output directory. Running make will produce the docset in
|
||||||
# that directory and running make install will install the docset in
|
# that directory and running make install will install the docset in
|
||||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
|
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
|
||||||
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
|
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
|
||||||
# for more information.
|
# genXcode/_index.html for more information.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
|
|
@ -1203,7 +1324,7 @@ DOCSET_PUBLISHER_NAME = Publisher
|
||||||
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
||||||
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
||||||
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
||||||
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
|
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
|
||||||
# Windows.
|
# Windows.
|
||||||
#
|
#
|
||||||
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
||||||
|
|
@ -1279,7 +1400,7 @@ QCH_FILE =
|
||||||
|
|
||||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
||||||
# Project output. For more information please see Qt Help Project / Namespace
|
# Project output. For more information please see Qt Help Project / Namespace
|
||||||
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
|
# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
|
||||||
# The default value is: org.doxygen.Project.
|
# The default value is: org.doxygen.Project.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
|
|
@ -1287,7 +1408,7 @@ QHP_NAMESPACE = org.doxygen.Project
|
||||||
|
|
||||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
||||||
# Help Project output. For more information please see Qt Help Project / Virtual
|
# Help Project output. For more information please see Qt Help Project / Virtual
|
||||||
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
|
# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
|
||||||
# folders).
|
# folders).
|
||||||
# The default value is: doc.
|
# The default value is: doc.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
@ -1296,7 +1417,7 @@ QHP_VIRTUAL_FOLDER = doc
|
||||||
|
|
||||||
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
||||||
# filter to add. For more information please see Qt Help Project / Custom
|
# filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
|
||||||
# filters).
|
# filters).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
|
|
@ -1304,7 +1425,7 @@ QHP_CUST_FILTER_NAME =
|
||||||
|
|
||||||
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
||||||
# custom filter to add. For more information please see Qt Help Project / Custom
|
# custom filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
|
||||||
# filters).
|
# filters).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
|
|
@ -1312,7 +1433,7 @@ QHP_CUST_FILTER_ATTRS =
|
||||||
|
|
||||||
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
||||||
# project's filter section matches. Qt Help Project / Filter Attributes (see:
|
# project's filter section matches. Qt Help Project / Filter Attributes (see:
|
||||||
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
|
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_SECT_FILTER_ATTRS =
|
QHP_SECT_FILTER_ATTRS =
|
||||||
|
|
@ -1405,7 +1526,7 @@ EXT_LINKS_IN_WINDOW = NO
|
||||||
|
|
||||||
FORMULA_FONTSIZE = 10
|
FORMULA_FONTSIZE = 10
|
||||||
|
|
||||||
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
|
# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
|
||||||
# generated for formulas are transparent PNGs. Transparent PNGs are not
|
# generated for formulas are transparent PNGs. Transparent PNGs are not
|
||||||
# supported properly for IE 6.0, but are supported on all modern browsers.
|
# supported properly for IE 6.0, but are supported on all modern browsers.
|
||||||
#
|
#
|
||||||
|
|
@ -1416,8 +1537,14 @@ FORMULA_FONTSIZE = 10
|
||||||
|
|
||||||
FORMULA_TRANSPARENT = YES
|
FORMULA_TRANSPARENT = YES
|
||||||
|
|
||||||
|
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
|
||||||
|
# to create new LaTeX commands to be used in formulas as building blocks. See
|
||||||
|
# the section "Including formulas" for details.
|
||||||
|
|
||||||
|
FORMULA_MACROFILE =
|
||||||
|
|
||||||
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
||||||
# http://www.mathjax.org) which uses client side Javascript for the rendering
|
# https://www.mathjax.org) which uses client side JavaScript for the rendering
|
||||||
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
|
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
|
||||||
# installed or if you want to formulas look prettier in the HTML output. When
|
# installed or if you want to formulas look prettier in the HTML output. When
|
||||||
# enabled you may also need to install MathJax separately and configure the path
|
# enabled you may also need to install MathJax separately and configure the path
|
||||||
|
|
@ -1444,8 +1571,8 @@ MATHJAX_FORMAT = HTML-CSS
|
||||||
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
|
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
|
||||||
# Content Delivery Network so you can quickly see the result without installing
|
# Content Delivery Network so you can quickly see the result without installing
|
||||||
# MathJax. However, it is strongly recommended to install a local copy of
|
# MathJax. However, it is strongly recommended to install a local copy of
|
||||||
# MathJax from http://www.mathjax.org before deployment.
|
# MathJax from https://www.mathjax.org before deployment.
|
||||||
# The default value is: http://cdn.mathjax.org/mathjax/latest.
|
# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
|
||||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||||
|
|
||||||
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
||||||
|
|
@ -1487,7 +1614,7 @@ MATHJAX_CODEFILE =
|
||||||
SEARCHENGINE = YES
|
SEARCHENGINE = YES
|
||||||
|
|
||||||
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
||||||
# implemented using a web server instead of a web client using Javascript. There
|
# implemented using a web server instead of a web client using JavaScript. There
|
||||||
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
|
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
|
||||||
# setting. When disabled, doxygen will generate a PHP script for searching and
|
# setting. When disabled, doxygen will generate a PHP script for searching and
|
||||||
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
|
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
|
||||||
|
|
@ -1506,7 +1633,7 @@ SERVER_BASED_SEARCH = NO
|
||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see: http://xapian.org/).
|
# Xapian (see: https://xapian.org/).
|
||||||
#
|
#
|
||||||
# See the section "External Indexing and Searching" for details.
|
# See the section "External Indexing and Searching" for details.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
@ -1519,7 +1646,7 @@ EXTERNAL_SEARCH = NO
|
||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see: http://xapian.org/). See the section "External Indexing and
|
# Xapian (see: https://xapian.org/). See the section "External Indexing and
|
||||||
# Searching" for details.
|
# Searching" for details.
|
||||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||||
|
|
||||||
|
|
@ -1571,21 +1698,35 @@ LATEX_OUTPUT = latex
|
||||||
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
|
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
|
||||||
# invoked.
|
# invoked.
|
||||||
#
|
#
|
||||||
# Note that when enabling USE_PDFLATEX this option is only used for generating
|
# Note that when not enabling USE_PDFLATEX the default is latex when enabling
|
||||||
# bitmaps for formulas in the HTML output, but not in the Makefile that is
|
# USE_PDFLATEX the default is pdflatex and when in the later case latex is
|
||||||
# written to the output directory.
|
# chosen this is overwritten by pdflatex. For specific output languages the
|
||||||
# The default file is: latex.
|
# default can have been set differently, this depends on the implementation of
|
||||||
|
# the output language.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
LATEX_CMD_NAME = latex
|
LATEX_CMD_NAME = latex
|
||||||
|
|
||||||
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
|
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
|
||||||
# index for LaTeX.
|
# index for LaTeX.
|
||||||
|
# Note: This tag is used in the Makefile / make.bat.
|
||||||
|
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
|
||||||
|
# (.tex).
|
||||||
# The default file is: makeindex.
|
# The default file is: makeindex.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
MAKEINDEX_CMD_NAME = makeindex
|
MAKEINDEX_CMD_NAME = makeindex
|
||||||
|
|
||||||
|
# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
|
||||||
|
# generate index for LaTeX. In case there is no backslash (\) as first character
|
||||||
|
# it will be automatically added in the LaTeX code.
|
||||||
|
# Note: This tag is used in the generated output file (.tex).
|
||||||
|
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
|
||||||
|
# The default value is: makeindex.
|
||||||
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
|
LATEX_MAKEINDEX_CMD = makeindex
|
||||||
|
|
||||||
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
|
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
|
||||||
# documents. This may be useful for small projects and may help to save some
|
# documents. This may be useful for small projects and may help to save some
|
||||||
# trees in general.
|
# trees in general.
|
||||||
|
|
@ -1604,9 +1745,12 @@ COMPACT_LATEX = NO
|
||||||
PAPER_TYPE = a4
|
PAPER_TYPE = a4
|
||||||
|
|
||||||
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
|
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
|
||||||
# that should be included in the LaTeX output. To get the times font for
|
# that should be included in the LaTeX output. The package can be specified just
|
||||||
# instance you can specify
|
# by its name or with the correct syntax as to be used with the LaTeX
|
||||||
# EXTRA_PACKAGES=times
|
# \usepackage command. To get the times font for instance you can specify :
|
||||||
|
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
|
||||||
|
# To use the option intlimits with the amsmath package you can specify:
|
||||||
|
# EXTRA_PACKAGES=[intlimits]{amsmath}
|
||||||
# If left blank no extra packages will be included.
|
# If left blank no extra packages will be included.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
|
|
@ -1703,12 +1847,28 @@ LATEX_SOURCE_CODE = NO
|
||||||
|
|
||||||
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
|
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
|
||||||
# bibliography, e.g. plainnat, or ieeetr. See
|
# bibliography, e.g. plainnat, or ieeetr. See
|
||||||
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
|
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
|
||||||
# The default value is: plain.
|
# The default value is: plain.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
LATEX_BIB_STYLE = plain
|
LATEX_BIB_STYLE = plain
|
||||||
|
|
||||||
|
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
|
||||||
|
# page will contain the date and time when the page was generated. Setting this
|
||||||
|
# to NO can help when comparing the output of multiple runs.
|
||||||
|
# The default value is: NO.
|
||||||
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
|
LATEX_TIMESTAMP = NO
|
||||||
|
|
||||||
|
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
|
# path from which the emoji images will be read. If a relative path is entered,
|
||||||
|
# it will be relative to the LATEX_OUTPUT directory. If left blank the
|
||||||
|
# LATEX_OUTPUT directory will be used.
|
||||||
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
|
LATEX_EMOJI_DIRECTORY =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the RTF output
|
# Configuration options related to the RTF output
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
@ -1748,9 +1908,9 @@ COMPACT_RTF = NO
|
||||||
|
|
||||||
RTF_HYPERLINKS = NO
|
RTF_HYPERLINKS = NO
|
||||||
|
|
||||||
# Load stylesheet definitions from file. Syntax is similar to doxygen's config
|
# Load stylesheet definitions from file. Syntax is similar to doxygen's
|
||||||
# file, i.e. a series of assignments. You only have to provide replacements,
|
# configuration file, i.e. a series of assignments. You only have to provide
|
||||||
# missing definitions are set to their default value.
|
# replacements, missing definitions are set to their default value.
|
||||||
#
|
#
|
||||||
# See also section "Doxygen usage" for information on how to generate the
|
# See also section "Doxygen usage" for information on how to generate the
|
||||||
# default style sheet that doxygen normally uses.
|
# default style sheet that doxygen normally uses.
|
||||||
|
|
@ -1759,8 +1919,8 @@ RTF_HYPERLINKS = NO
|
||||||
RTF_STYLESHEET_FILE =
|
RTF_STYLESHEET_FILE =
|
||||||
|
|
||||||
# Set optional variables used in the generation of an RTF document. Syntax is
|
# Set optional variables used in the generation of an RTF document. Syntax is
|
||||||
# similar to doxygen's config file. A template extensions file can be generated
|
# similar to doxygen's configuration file. A template extensions file can be
|
||||||
# using doxygen -e rtf extensionFile.
|
# generated using doxygen -e rtf extensionFile.
|
||||||
# This tag requires that the tag GENERATE_RTF is set to YES.
|
# This tag requires that the tag GENERATE_RTF is set to YES.
|
||||||
|
|
||||||
RTF_EXTENSIONS_FILE =
|
RTF_EXTENSIONS_FILE =
|
||||||
|
|
@ -1846,6 +2006,13 @@ XML_OUTPUT = xml
|
||||||
|
|
||||||
XML_PROGRAMLISTING = NO
|
XML_PROGRAMLISTING = NO
|
||||||
|
|
||||||
|
# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
|
||||||
|
# namespace members in file scope as well, matching the HTML output.
|
||||||
|
# The default value is: NO.
|
||||||
|
# This tag requires that the tag GENERATE_XML is set to YES.
|
||||||
|
|
||||||
|
XML_NS_MEMB_FILE_SCOPE = NO
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the DOCBOOK output
|
# Configuration options related to the DOCBOOK output
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
@ -1878,9 +2045,9 @@ DOCBOOK_PROGRAMLISTING = NO
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
|
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
|
||||||
# AutoGen Definitions (see http://autogen.sf.net) file that captures the
|
# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
|
||||||
# structure of the code including all documentation. Note that this feature is
|
# the structure of the code including all documentation. Note that this feature
|
||||||
# still experimental and incomplete at the moment.
|
# is still experimental and incomplete at the moment.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
GENERATE_AUTOGEN_DEF = NO
|
GENERATE_AUTOGEN_DEF = NO
|
||||||
|
|
@ -2047,12 +2214,6 @@ EXTERNAL_GROUPS = YES
|
||||||
|
|
||||||
EXTERNAL_PAGES = YES
|
EXTERNAL_PAGES = YES
|
||||||
|
|
||||||
# The PERL_PATH should be the absolute path and name of the perl script
|
|
||||||
# interpreter (i.e. the result of 'which perl').
|
|
||||||
# The default file (with absolute path) is: /usr/bin/perl.
|
|
||||||
|
|
||||||
PERL_PATH = /usr/bin/perl
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the dot tool
|
# Configuration options related to the dot tool
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
@ -2066,15 +2227,6 @@ PERL_PATH = /usr/bin/perl
|
||||||
|
|
||||||
CLASS_DIAGRAMS = YES
|
CLASS_DIAGRAMS = YES
|
||||||
|
|
||||||
# You can define message sequence charts within doxygen comments using the \msc
|
|
||||||
# command. Doxygen will then run the mscgen tool (see:
|
|
||||||
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
|
|
||||||
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
|
|
||||||
# the mscgen tool resides. If left empty the tool is assumed to be found in the
|
|
||||||
# default search path.
|
|
||||||
|
|
||||||
MSCGEN_PATH =
|
|
||||||
|
|
||||||
# You can include diagrams made with dia in doxygen documentation. Doxygen will
|
# You can include diagrams made with dia in doxygen documentation. Doxygen will
|
||||||
# then run dia to produce the diagram and insert it in the documentation. The
|
# then run dia to produce the diagram and insert it in the documentation. The
|
||||||
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
|
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
|
||||||
|
|
@ -2093,7 +2245,7 @@ HIDE_UNDOC_RELATIONS = YES
|
||||||
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
|
||||||
# Bell Labs. The other options in this section have no effect if this option is
|
# Bell Labs. The other options in this section have no effect if this option is
|
||||||
# set to NO
|
# set to NO
|
||||||
# The default value is: NO.
|
# The default value is: YES.
|
||||||
|
|
||||||
HAVE_DOT = NO
|
HAVE_DOT = NO
|
||||||
|
|
||||||
|
|
@ -2207,7 +2359,8 @@ INCLUDED_BY_GRAPH = YES
|
||||||
#
|
#
|
||||||
# Note that enabling this option will significantly increase the time of a run.
|
# Note that enabling this option will significantly increase the time of a run.
|
||||||
# So in most cases it will be better to enable call graphs for selected
|
# So in most cases it will be better to enable call graphs for selected
|
||||||
# functions only using the \callgraph command.
|
# functions only using the \callgraph command. Disabling a call graph can be
|
||||||
|
# accomplished by means of the command \hidecallgraph.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
|
|
@ -2218,7 +2371,8 @@ CALL_GRAPH = NO
|
||||||
#
|
#
|
||||||
# Note that enabling this option will significantly increase the time of a run.
|
# Note that enabling this option will significantly increase the time of a run.
|
||||||
# So in most cases it will be better to enable caller graphs for selected
|
# So in most cases it will be better to enable caller graphs for selected
|
||||||
# functions only using the \callergraph command.
|
# functions only using the \callergraph command. Disabling a caller graph can be
|
||||||
|
# accomplished by means of the command \hidecallergraph.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
|
|
@ -2241,11 +2395,17 @@ GRAPHICAL_HIERARCHY = YES
|
||||||
DIRECTORY_GRAPH = YES
|
DIRECTORY_GRAPH = YES
|
||||||
|
|
||||||
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
|
||||||
# generated by dot.
|
# generated by dot. For an explanation of the image formats see the section
|
||||||
|
# output formats in the documentation of the dot tool (Graphviz (see:
|
||||||
|
# http://www.graphviz.org/)).
|
||||||
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
|
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
|
||||||
# to make the SVG files visible in IE 9+ (other browsers do not have this
|
# to make the SVG files visible in IE 9+ (other browsers do not have this
|
||||||
# requirement).
|
# requirement).
|
||||||
# Possible values are: png, jpg, gif and svg.
|
# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
|
||||||
|
# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
|
||||||
|
# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
|
||||||
|
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
|
||||||
|
# png:gdiplus:gdiplus.
|
||||||
# The default value is: png.
|
# The default value is: png.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
|
|
@ -2296,6 +2456,11 @@ DIAFILE_DIRS =
|
||||||
|
|
||||||
PLANTUML_JAR_PATH =
|
PLANTUML_JAR_PATH =
|
||||||
|
|
||||||
|
# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
|
||||||
|
# configuration file for plantuml.
|
||||||
|
|
||||||
|
PLANTUML_CFG_FILE =
|
||||||
|
|
||||||
# When using plantuml, the specified paths are searched for files specified by
|
# When using plantuml, the specified paths are searched for files specified by
|
||||||
# the !include statement in a plantuml block.
|
# the !include statement in a plantuml block.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ namespace graphene { namespace app {
|
||||||
|
|
||||||
vector<optional<signed_block>> block_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const
|
vector<optional<signed_block>> block_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const
|
||||||
{
|
{
|
||||||
FC_ASSERT( block_num_to >= block_num_from );
|
FC_ASSERT( block_num_to >= block_num_from && block_num_to - block_num_from <= 100, "Total blocks to be returned should be less than 100");
|
||||||
vector<optional<signed_block>> res;
|
vector<optional<signed_block>> res;
|
||||||
for(uint32_t block_num=block_num_from; block_num<=block_num_to; block_num++) {
|
for(uint32_t block_num=block_num_from; block_num<=block_num_to; block_num++) {
|
||||||
res.push_back(_db.fetch_block_by_number(block_num));
|
res.push_back(_db.fetch_block_by_number(block_num));
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ class database_api_impl : public std::enable_shared_from_this<database_api_impl>
|
||||||
optional<block_header> get_block_header(uint32_t block_num)const;
|
optional<block_header> get_block_header(uint32_t block_num)const;
|
||||||
map<uint32_t, optional<block_header>> get_block_header_batch(const vector<uint32_t> block_nums)const;
|
map<uint32_t, optional<block_header>> get_block_header_batch(const vector<uint32_t> block_nums)const;
|
||||||
optional<signed_block> get_block(uint32_t block_num)const;
|
optional<signed_block> get_block(uint32_t block_num)const;
|
||||||
|
vector<optional<signed_block>> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const;
|
||||||
processed_transaction get_transaction( uint32_t block_num, uint32_t trx_in_block )const;
|
processed_transaction get_transaction( uint32_t block_num, uint32_t trx_in_block )const;
|
||||||
|
|
||||||
// Globals
|
// Globals
|
||||||
|
|
@ -247,9 +248,6 @@ class database_api_impl : public std::enable_shared_from_this<database_api_impl>
|
||||||
|
|
||||||
// Account Role
|
// Account Role
|
||||||
vector<account_role_object> get_account_roles_by_owner(account_id_type owner) const;
|
vector<account_role_object> get_account_roles_by_owner(account_id_type owner) const;
|
||||||
// rng
|
|
||||||
vector<uint64_t> get_random_number_ex(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates) const;
|
|
||||||
uint64_t get_random_number(uint64_t bound) const;
|
|
||||||
|
|
||||||
//private:
|
//private:
|
||||||
const account_object* get_account_from_string( const std::string& name_or_id,
|
const account_object* get_account_from_string( const std::string& name_or_id,
|
||||||
|
|
@ -499,6 +497,21 @@ optional<signed_block> database_api_impl::get_block(uint32_t block_num)const
|
||||||
return _db.fetch_block_by_number(block_num);
|
return _db.fetch_block_by_number(block_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<optional<signed_block>> database_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const
|
||||||
|
{
|
||||||
|
return my->get_blocks( block_num_from, block_num_to );
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<optional<signed_block>> database_api_impl::get_blocks(uint32_t block_num_from, uint32_t block_num_to)const
|
||||||
|
{
|
||||||
|
FC_ASSERT( block_num_to >= block_num_from && block_num_to - block_num_from <= 100, "Total blocks to be returned should be less than 100");
|
||||||
|
vector<optional<signed_block>> res;
|
||||||
|
for(uint32_t block_num=block_num_from; block_num<=block_num_to; block_num++) {
|
||||||
|
res.push_back(_db.fetch_block_by_number(block_num));
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
processed_transaction database_api::get_transaction( uint32_t block_num, uint32_t trx_in_block )const
|
processed_transaction database_api::get_transaction( uint32_t block_num, uint32_t trx_in_block )const
|
||||||
{
|
{
|
||||||
return my->get_transaction( block_num, trx_in_block );
|
return my->get_transaction( block_num, trx_in_block );
|
||||||
|
|
@ -3176,31 +3189,6 @@ vector<account_role_object> database_api_impl::get_account_roles_by_owner(accoun
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// //
|
|
||||||
// Random numbers //
|
|
||||||
// //
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
vector<uint64_t> database_api::get_random_number_ex(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates) const
|
|
||||||
{
|
|
||||||
return my->get_random_number_ex(minimum, maximum, selections, duplicates);
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<uint64_t> database_api_impl::get_random_number_ex(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates) const
|
|
||||||
{
|
|
||||||
return _db.get_random_numbers(minimum, maximum, selections, duplicates);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t database_api::get_random_number(uint64_t bound) const
|
|
||||||
{
|
|
||||||
return my->get_random_number(bound);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t database_api_impl::get_random_number(uint64_t bound) const {
|
|
||||||
vector<uint64_t> v = get_random_number_ex(0, bound, 1, false);
|
|
||||||
return v.at(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// //
|
// //
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,14 @@ class database_api
|
||||||
*/
|
*/
|
||||||
optional<signed_block> get_block(uint32_t block_num)const;
|
optional<signed_block> get_block(uint32_t block_num)const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retrieve a list of signed blocks
|
||||||
|
* @param block_num_from start
|
||||||
|
* @param block_num_to end
|
||||||
|
* @return list of referenced blocks
|
||||||
|
*/
|
||||||
|
vector<optional<signed_block>> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief used to fetch an individual transaction.
|
* @brief used to fetch an individual transaction.
|
||||||
*/
|
*/
|
||||||
|
|
@ -935,26 +943,6 @@ class database_api
|
||||||
//////////////////
|
//////////////////
|
||||||
vector<account_role_object> get_account_roles_by_owner(account_id_type owner) const;
|
vector<account_role_object> get_account_roles_by_owner(account_id_type owner) const;
|
||||||
|
|
||||||
/////////////////////////////
|
|
||||||
// Random number generator //
|
|
||||||
/////////////////////////////
|
|
||||||
/**
|
|
||||||
* @brief Returns the random number
|
|
||||||
* @param minimum Lower bound of segment containing random number
|
|
||||||
* @param maximum Upper bound of segment containing random number
|
|
||||||
* @param selections Number of random numbers to return
|
|
||||||
* @param duplicates Allow duplicated numbers
|
|
||||||
* @return Vector containing random numbers from segment [minimum, maximum)
|
|
||||||
*/
|
|
||||||
vector<uint64_t> get_random_number_ex(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Returns the random number
|
|
||||||
* @param bound Upper bound of segment containing random number
|
|
||||||
* @return Random number from segment [0, bound)
|
|
||||||
*/
|
|
||||||
uint64_t get_random_number(uint64_t bound) const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr< database_api_impl > my;
|
std::shared_ptr< database_api_impl > my;
|
||||||
};
|
};
|
||||||
|
|
@ -985,6 +973,7 @@ FC_API(graphene::app::database_api,
|
||||||
(get_block_header)
|
(get_block_header)
|
||||||
(get_block_header_batch)
|
(get_block_header_batch)
|
||||||
(get_block)
|
(get_block)
|
||||||
|
(get_blocks)
|
||||||
(get_transaction)
|
(get_transaction)
|
||||||
(get_recent_transaction_by_id)
|
(get_recent_transaction_by_id)
|
||||||
|
|
||||||
|
|
@ -1146,7 +1135,4 @@ FC_API(graphene::app::database_api,
|
||||||
|
|
||||||
// Account Roles
|
// Account Roles
|
||||||
(get_account_roles_by_owner)
|
(get_account_roles_by_owner)
|
||||||
// rngs
|
|
||||||
(get_random_number_ex)
|
|
||||||
(get_random_number)
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -178,36 +178,52 @@ void database::update_worker_votes()
|
||||||
|
|
||||||
void database::pay_sons()
|
void database::pay_sons()
|
||||||
{
|
{
|
||||||
auto get_weight = []( uint64_t total_votes ) {
|
|
||||||
int8_t bits_to_drop = std::max(int(boost::multiprecision::detail::find_msb(total_votes)) - 15, 0);
|
|
||||||
uint16_t weight = std::max((total_votes >> bits_to_drop), uint64_t(1) );
|
|
||||||
return weight;
|
|
||||||
};
|
|
||||||
time_point_sec now = head_block_time();
|
time_point_sec now = head_block_time();
|
||||||
const dynamic_global_property_object& dpo = get_dynamic_global_properties();
|
const dynamic_global_property_object& dpo = get_dynamic_global_properties();
|
||||||
// Current requirement is that we have to pay every 24 hours, so the following check
|
// Current requirement is that we have to pay every 24 hours, so the following check
|
||||||
if( dpo.son_budget.value > 0 && ((now - dpo.last_son_payout_time) >= fc::seconds(get_global_properties().parameters.son_pay_time()))) {
|
if( dpo.son_budget.value > 0 && ((now - dpo.last_son_payout_time) >= fc::seconds(get_global_properties().parameters.son_pay_time()))) {
|
||||||
|
auto sons = sort_votable_objects<son_index>(get_global_properties().parameters.maximum_son_count());
|
||||||
|
// After SON2 HF
|
||||||
|
uint64_t total_votes = 0;
|
||||||
|
for( const son_object& son : sons )
|
||||||
|
{
|
||||||
|
total_votes += _vote_tally_buffer[son.vote_id];
|
||||||
|
}
|
||||||
|
int8_t bits_to_drop = std::max(int(boost::multiprecision::detail::find_msb(total_votes)) - 15, 0);
|
||||||
|
auto get_weight = [&bits_to_drop]( uint64_t son_votes ) {
|
||||||
|
uint16_t weight = std::max((son_votes >> bits_to_drop), uint64_t(1) );
|
||||||
|
return weight;
|
||||||
|
};
|
||||||
|
// Before SON2 HF
|
||||||
|
auto get_weight_before_son2_hf = []( uint64_t son_votes ) {
|
||||||
|
int8_t bits_to_drop = std::max(int(boost::multiprecision::detail::find_msb(son_votes)) - 15, 0);
|
||||||
|
uint16_t weight = std::max((son_votes >> bits_to_drop), uint64_t(1) );
|
||||||
|
return weight;
|
||||||
|
};
|
||||||
uint64_t weighted_total_txs_signed = 0;
|
uint64_t weighted_total_txs_signed = 0;
|
||||||
share_type son_budget = dpo.son_budget;
|
share_type son_budget = dpo.son_budget;
|
||||||
get_index_type<son_stats_index>().inspect_all_objects([this, &weighted_total_txs_signed, &get_weight](const object& o) {
|
get_index_type<son_stats_index>().inspect_all_objects([this, &weighted_total_txs_signed, &get_weight, &now, &get_weight_before_son2_hf](const object& o) {
|
||||||
const son_statistics_object& s = static_cast<const son_statistics_object&>(o);
|
const son_statistics_object& s = static_cast<const son_statistics_object&>(o);
|
||||||
const auto& idx = get_index_type<son_index>().indices().get<by_id>();
|
const auto& idx = get_index_type<son_index>().indices().get<by_id>();
|
||||||
auto son_obj = idx.find( s.owner );
|
auto son_obj = idx.find( s.owner );
|
||||||
auto son_weight = get_weight(_vote_tally_buffer[son_obj->vote_id]);
|
auto son_weight = get_weight(_vote_tally_buffer[son_obj->vote_id]);
|
||||||
|
if( now < HARDFORK_SON2_TIME ) {
|
||||||
|
son_weight = get_weight_before_son2_hf(_vote_tally_buffer[son_obj->vote_id]);
|
||||||
|
}
|
||||||
weighted_total_txs_signed += (s.txs_signed * son_weight);
|
weighted_total_txs_signed += (s.txs_signed * son_weight);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Now pay off each SON proportional to the number of transactions signed.
|
// Now pay off each SON proportional to the number of transactions signed.
|
||||||
get_index_type<son_stats_index>().inspect_all_objects([this, &weighted_total_txs_signed, &dpo, &son_budget, &get_weight](const object& o) {
|
get_index_type<son_stats_index>().inspect_all_objects([this, &weighted_total_txs_signed, &dpo, &son_budget, &get_weight, &get_weight_before_son2_hf, &now](const object& o) {
|
||||||
const son_statistics_object& s = static_cast<const son_statistics_object&>(o);
|
const son_statistics_object& s = static_cast<const son_statistics_object&>(o);
|
||||||
if(s.txs_signed > 0){
|
if(s.txs_signed > 0){
|
||||||
auto son_params = get_global_properties().parameters;
|
|
||||||
const auto& idx = get_index_type<son_index>().indices().get<by_id>();
|
const auto& idx = get_index_type<son_index>().indices().get<by_id>();
|
||||||
auto son_obj = idx.find( s.owner );
|
auto son_obj = idx.find( s.owner );
|
||||||
auto son_weight = get_weight(_vote_tally_buffer[son_obj->vote_id]);
|
auto son_weight = get_weight(_vote_tally_buffer[son_obj->vote_id]);
|
||||||
|
if( now < HARDFORK_SON2_TIME ) {
|
||||||
|
son_weight = get_weight_before_son2_hf(_vote_tally_buffer[son_obj->vote_id]);
|
||||||
|
}
|
||||||
share_type pay = (s.txs_signed * son_weight * son_budget.value)/weighted_total_txs_signed;
|
share_type pay = (s.txs_signed * son_weight * son_budget.value)/weighted_total_txs_signed;
|
||||||
|
|
||||||
modify( *son_obj, [&]( son_object& _son_obj)
|
modify( *son_obj, [&]( son_object& _son_obj)
|
||||||
{
|
{
|
||||||
_son_obj.pay_son_fee(pay, *this);
|
_son_obj.pay_son_fee(pay, *this);
|
||||||
|
|
@ -1939,6 +1955,21 @@ void database::perform_son_tasks()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_son_asset(database& db)
|
||||||
|
{
|
||||||
|
if( db.head_block_time() >= HARDFORK_SON2_TIME )
|
||||||
|
{
|
||||||
|
const auto& gpo = db.get_global_properties();
|
||||||
|
const asset_object& btc_asset = gpo.parameters.btc_asset()(db);
|
||||||
|
if( btc_asset.is_transfer_restricted() ) {
|
||||||
|
db.modify( btc_asset, []( asset_object& ao ) {
|
||||||
|
ao.options.flags = asset_issuer_permission_flags::charge_market_fee |
|
||||||
|
asset_issuer_permission_flags::override_authority;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void database::perform_chain_maintenance(const signed_block& next_block, const global_property_object& global_props)
|
void database::perform_chain_maintenance(const signed_block& next_block, const global_property_object& global_props)
|
||||||
{ try {
|
{ try {
|
||||||
const auto& gpo = get_global_properties();
|
const auto& gpo = get_global_properties();
|
||||||
|
|
@ -1950,6 +1981,8 @@ void database::perform_chain_maintenance(const signed_block& next_block, const g
|
||||||
|
|
||||||
rolling_period_start(*this);
|
rolling_period_start(*this);
|
||||||
|
|
||||||
|
update_son_asset(*this);
|
||||||
|
|
||||||
struct vote_tally_helper {
|
struct vote_tally_helper {
|
||||||
database& d;
|
database& d;
|
||||||
const global_property_object& props;
|
const global_property_object& props;
|
||||||
|
|
|
||||||
4
libraries/chain/hardfork.d/SON2.hf
Normal file
4
libraries/chain/hardfork.d/SON2.hf
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
// SON2 HARDFORK Friday, June 11, 2021 00:00:00 GMT
|
||||||
|
#ifndef HARDFORK_SON2_TIME
|
||||||
|
#define HARDFORK_SON2_TIME (fc::time_point_sec( 1623369600 ))
|
||||||
|
#endif
|
||||||
|
|
@ -164,7 +164,12 @@ namespace graphene { namespace chain {
|
||||||
|
|
||||||
template<class DB>
|
template<class DB>
|
||||||
const asset_bitasset_data_object& bitasset_data(const DB& db)const
|
const asset_bitasset_data_object& bitasset_data(const DB& db)const
|
||||||
{ assert(bitasset_data_id); return db.get(*bitasset_data_id); }
|
{
|
||||||
|
FC_ASSERT( bitasset_data_id.valid(),
|
||||||
|
"Asset ${a} (${id}) is not a market issued asset.",
|
||||||
|
("a",this->symbol)("id",this->id) );
|
||||||
|
return db.get(*bitasset_data_id);
|
||||||
|
}
|
||||||
|
|
||||||
template<class DB>
|
template<class DB>
|
||||||
const asset_dividend_data_object& dividend_data(const DB& db)const
|
const asset_dividend_data_object& dividend_data(const DB& db)const
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,20 @@ namespace detail {
|
||||||
class peerplays_sidechain_plugin_impl;
|
class peerplays_sidechain_plugin_impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct son_proposal_type {
|
||||||
|
son_proposal_type(int op, son_id_type son, object_id_type object) :
|
||||||
|
op_type(op),
|
||||||
|
son_id(son),
|
||||||
|
object_id(object) {
|
||||||
|
}
|
||||||
|
int op_type;
|
||||||
|
son_id_type son_id;
|
||||||
|
object_id_type object_id;
|
||||||
|
bool operator<(const son_proposal_type &other) const {
|
||||||
|
return std::tie(op_type, son_id, object_id) < std::tie(other.op_type, other.son_id, other.object_id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class peerplays_sidechain_plugin : public graphene::app::plugin {
|
class peerplays_sidechain_plugin : public graphene::app::plugin {
|
||||||
public:
|
public:
|
||||||
peerplays_sidechain_plugin();
|
peerplays_sidechain_plugin();
|
||||||
|
|
@ -34,6 +48,8 @@ public:
|
||||||
bool is_son_deregistered(son_id_type son_id);
|
bool is_son_deregistered(son_id_type son_id);
|
||||||
fc::ecc::private_key get_private_key(son_id_type son_id);
|
fc::ecc::private_key get_private_key(son_id_type son_id);
|
||||||
fc::ecc::private_key get_private_key(chain::public_key_type public_key);
|
fc::ecc::private_key get_private_key(chain::public_key_type public_key);
|
||||||
|
void log_son_proposal_retry(int op_type, object_id_type object_id);
|
||||||
|
bool can_son_participate(int op_type, object_id_type object_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
}} // namespace graphene::peerplays_sidechain
|
}} // namespace graphene::peerplays_sidechain
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ public:
|
||||||
bool is_valid_son_proposal(const chain::proposal_object &proposal);
|
bool is_valid_son_proposal(const chain::proposal_object &proposal);
|
||||||
fc::ecc::private_key get_private_key(son_id_type son_id);
|
fc::ecc::private_key get_private_key(son_id_type son_id);
|
||||||
fc::ecc::private_key get_private_key(chain::public_key_type public_key);
|
fc::ecc::private_key get_private_key(chain::public_key_type public_key);
|
||||||
|
void log_son_proposal_retry(int op_type, object_id_type object_id);
|
||||||
|
bool can_son_participate(int op_type, object_id_type object_id);
|
||||||
|
|
||||||
void schedule_heartbeat_loop();
|
void schedule_heartbeat_loop();
|
||||||
void heartbeat_loop();
|
void heartbeat_loop();
|
||||||
|
|
@ -75,6 +77,8 @@ private:
|
||||||
std::map<chain::public_key_type, fc::ecc::private_key> private_keys;
|
std::map<chain::public_key_type, fc::ecc::private_key> private_keys;
|
||||||
fc::future<void> _heartbeat_task;
|
fc::future<void> _heartbeat_task;
|
||||||
fc::future<void> _son_processing_task;
|
fc::future<void> _son_processing_task;
|
||||||
|
std::map<son_proposal_type, uint16_t> son_retry_count;
|
||||||
|
uint16_t retries_threshold;
|
||||||
|
|
||||||
bool first_block_skipped;
|
bool first_block_skipped;
|
||||||
void on_applied_block(const signed_block &b);
|
void on_applied_block(const signed_block &b);
|
||||||
|
|
@ -130,6 +134,7 @@ void peerplays_sidechain_plugin_impl::plugin_set_program_options(
|
||||||
cli.add_options()("bitcoin-wallet-password", bpo::value<string>(), "Bitcoin wallet password");
|
cli.add_options()("bitcoin-wallet-password", bpo::value<string>(), "Bitcoin wallet password");
|
||||||
cli.add_options()("bitcoin-private-key", bpo::value<vector<string>>()->composing()->multitoken()->DEFAULT_VALUE_VECTOR(std::make_pair("02d0f137e717fb3aab7aff99904001d49a0a636c5e1342f8927a4ba2eaee8e9772", "cVN31uC9sTEr392DLVUEjrtMgLA8Yb3fpYmTRj7bomTm6nn2ANPr")),
|
cli.add_options()("bitcoin-private-key", bpo::value<vector<string>>()->composing()->multitoken()->DEFAULT_VALUE_VECTOR(std::make_pair("02d0f137e717fb3aab7aff99904001d49a0a636c5e1342f8927a4ba2eaee8e9772", "cVN31uC9sTEr392DLVUEjrtMgLA8Yb3fpYmTRj7bomTm6nn2ANPr")),
|
||||||
"Tuple of [Bitcoin public key, Bitcoin private key] (may specify multiple times)");
|
"Tuple of [Bitcoin public key, Bitcoin private key] (may specify multiple times)");
|
||||||
|
cli.add_options()("sidechain-retry-threshold", bpo::value<uint16_t>()->default_value(150), "Sidechain retry throttling threshold");
|
||||||
cfg.add(cli);
|
cfg.add(cli);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,6 +174,8 @@ void peerplays_sidechain_plugin_impl::plugin_initialize(const boost::program_opt
|
||||||
}
|
}
|
||||||
config_ready_son = config_ready_son && !private_keys.empty();
|
config_ready_son = config_ready_son && !private_keys.empty();
|
||||||
}
|
}
|
||||||
|
retries_threshold = options.at("sidechain-retry-threshold").as<uint16_t>();
|
||||||
|
ilog("sidechain-retry-threshold: ${sidechain-retry-threshold}", ("sidechain-retry-threshold", retries_threshold));
|
||||||
}
|
}
|
||||||
if (!config_ready_son) {
|
if (!config_ready_son) {
|
||||||
wlog("Haven't set up SON parameters");
|
wlog("Haven't set up SON parameters");
|
||||||
|
|
@ -279,7 +286,7 @@ bool peerplays_sidechain_plugin_impl::is_son_deregistered(son_id_type son_id) {
|
||||||
if (son_obj == idx.end())
|
if (son_obj == idx.end())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if(son_obj->status == chain::son_status::deregistered) {
|
if (son_obj->status == chain::son_status::deregistered) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -449,6 +456,22 @@ bool peerplays_sidechain_plugin_impl::is_valid_son_proposal(const chain::proposa
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void peerplays_sidechain_plugin_impl::log_son_proposal_retry(int op_type, object_id_type object_id) {
|
||||||
|
son_proposal_type prop_type(op_type, get_current_son_id(), object_id);
|
||||||
|
auto itr = son_retry_count.find(prop_type);
|
||||||
|
if (itr != son_retry_count.end()) {
|
||||||
|
itr->second++;
|
||||||
|
} else {
|
||||||
|
son_retry_count[prop_type] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool peerplays_sidechain_plugin_impl::can_son_participate(int op_type, object_id_type object_id) {
|
||||||
|
son_proposal_type prop_type(op_type, get_current_son_id(), object_id);
|
||||||
|
auto itr = son_retry_count.find(prop_type);
|
||||||
|
return (itr == son_retry_count.end() || itr->second < retries_threshold);
|
||||||
|
}
|
||||||
|
|
||||||
void peerplays_sidechain_plugin_impl::approve_proposals() {
|
void peerplays_sidechain_plugin_impl::approve_proposals() {
|
||||||
|
|
||||||
auto check_approve_proposal = [&](const chain::son_id_type &son_id, const chain::proposal_object &proposal) {
|
auto check_approve_proposal = [&](const chain::son_id_type &son_id, const chain::proposal_object &proposal) {
|
||||||
|
|
@ -695,4 +718,12 @@ fc::ecc::private_key peerplays_sidechain_plugin::get_private_key(chain::public_k
|
||||||
return my->get_private_key(public_key);
|
return my->get_private_key(public_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void peerplays_sidechain_plugin::log_son_proposal_retry(int op_type, object_id_type object_id) {
|
||||||
|
my->log_son_proposal_retry(op_type, object_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool peerplays_sidechain_plugin::can_son_participate(int op_type, object_id_type object_id) {
|
||||||
|
return my->can_son_participate(op_type, object_id);
|
||||||
|
}
|
||||||
|
|
||||||
}} // namespace graphene::peerplays_sidechain
|
}} // namespace graphene::peerplays_sidechain
|
||||||
|
|
|
||||||
|
|
@ -275,6 +275,7 @@ void sidechain_net_handler::process_proposals() {
|
||||||
|
|
||||||
int32_t op_idx_0 = -1;
|
int32_t op_idx_0 = -1;
|
||||||
chain::operation op_obj_idx_0;
|
chain::operation op_obj_idx_0;
|
||||||
|
object_id_type object_id;
|
||||||
|
|
||||||
if (po->proposed_transaction.operations.size() >= 1) {
|
if (po->proposed_transaction.operations.size() >= 1) {
|
||||||
op_idx_0 = po->proposed_transaction.operations[0].which();
|
op_idx_0 = po->proposed_transaction.operations[0].which();
|
||||||
|
|
@ -283,7 +284,7 @@ void sidechain_net_handler::process_proposals() {
|
||||||
|
|
||||||
int32_t op_idx_1 = -1;
|
int32_t op_idx_1 = -1;
|
||||||
chain::operation op_obj_idx_1;
|
chain::operation op_obj_idx_1;
|
||||||
(void) op_idx_1;
|
(void)op_idx_1;
|
||||||
|
|
||||||
if (po->proposed_transaction.operations.size() >= 2) {
|
if (po->proposed_transaction.operations.size() >= 2) {
|
||||||
op_idx_1 = po->proposed_transaction.operations[1].which();
|
op_idx_1 = po->proposed_transaction.operations[1].which();
|
||||||
|
|
@ -293,11 +294,13 @@ void sidechain_net_handler::process_proposals() {
|
||||||
switch (op_idx_0) {
|
switch (op_idx_0) {
|
||||||
case chain::operation::tag<chain::son_wallet_update_operation>::value: {
|
case chain::operation::tag<chain::son_wallet_update_operation>::value: {
|
||||||
should_process = (op_obj_idx_0.get<son_wallet_update_operation>().sidechain == sidechain);
|
should_process = (op_obj_idx_0.get<son_wallet_update_operation>().sidechain == sidechain);
|
||||||
|
object_id = op_obj_idx_0.get<son_wallet_update_operation>().son_wallet_id;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case chain::operation::tag<chain::son_wallet_deposit_process_operation>::value: {
|
case chain::operation::tag<chain::son_wallet_deposit_process_operation>::value: {
|
||||||
son_wallet_deposit_id_type swdo_id = op_obj_idx_0.get<son_wallet_deposit_process_operation>().son_wallet_deposit_id;
|
son_wallet_deposit_id_type swdo_id = op_obj_idx_0.get<son_wallet_deposit_process_operation>().son_wallet_deposit_id;
|
||||||
|
object_id = swdo_id;
|
||||||
const auto &idx = database.get_index_type<son_wallet_deposit_index>().indices().get<by_id>();
|
const auto &idx = database.get_index_type<son_wallet_deposit_index>().indices().get<by_id>();
|
||||||
const auto swdo = idx.find(swdo_id);
|
const auto swdo = idx.find(swdo_id);
|
||||||
if (swdo != idx.end()) {
|
if (swdo != idx.end()) {
|
||||||
|
|
@ -308,6 +311,7 @@ void sidechain_net_handler::process_proposals() {
|
||||||
|
|
||||||
case chain::operation::tag<chain::son_wallet_withdraw_process_operation>::value: {
|
case chain::operation::tag<chain::son_wallet_withdraw_process_operation>::value: {
|
||||||
son_wallet_withdraw_id_type swwo_id = op_obj_idx_0.get<son_wallet_withdraw_process_operation>().son_wallet_withdraw_id;
|
son_wallet_withdraw_id_type swwo_id = op_obj_idx_0.get<son_wallet_withdraw_process_operation>().son_wallet_withdraw_id;
|
||||||
|
object_id = swwo_id;
|
||||||
const auto &idx = database.get_index_type<son_wallet_withdraw_index>().indices().get<by_id>();
|
const auto &idx = database.get_index_type<son_wallet_withdraw_index>().indices().get<by_id>();
|
||||||
const auto swwo = idx.find(swwo_id);
|
const auto swwo = idx.find(swwo_id);
|
||||||
if (swwo != idx.end()) {
|
if (swwo != idx.end()) {
|
||||||
|
|
@ -323,6 +327,7 @@ void sidechain_net_handler::process_proposals() {
|
||||||
const auto sto = idx.find(st_id);
|
const auto sto = idx.find(st_id);
|
||||||
if (sto != idx.end()) {
|
if (sto != idx.end()) {
|
||||||
should_process = ((sto->sidechain == sidechain) && (sto->status == sidechain_transaction_status::valid) && signer_expected(*sto, signer));
|
should_process = ((sto->sidechain == sidechain) && (sto->status == sidechain_transaction_status::valid) && signer_expected(*sto, signer));
|
||||||
|
object_id = sto->object_id;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -333,6 +338,7 @@ void sidechain_net_handler::process_proposals() {
|
||||||
const auto sto = idx.find(st_id);
|
const auto sto = idx.find(st_id);
|
||||||
if (sto != idx.end()) {
|
if (sto != idx.end()) {
|
||||||
should_process = (sto->sidechain == sidechain);
|
should_process = (sto->sidechain == sidechain);
|
||||||
|
object_id = sto->object_id;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -344,10 +350,14 @@ void sidechain_net_handler::process_proposals() {
|
||||||
elog("==================================================");
|
elog("==================================================");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should_process) {
|
if (should_process && (op_idx_0 == chain::operation::tag<chain::sidechain_transaction_sign_operation>::value || plugin.can_son_participate(op_idx_0, object_id))) {
|
||||||
bool should_approve = process_proposal(*po);
|
bool should_approve = process_proposal(*po);
|
||||||
if (should_approve) {
|
if (should_approve) {
|
||||||
approve_proposal(po->id, plugin.get_current_son_id());
|
if (approve_proposal(po->id, plugin.get_current_son_id())) {
|
||||||
|
if (op_idx_0 != chain::operation::tag<chain::sidechain_transaction_sign_operation>::value) {
|
||||||
|
plugin.log_son_proposal_retry(op_idx_0, object_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -374,7 +384,7 @@ void sidechain_net_handler::process_deposits() {
|
||||||
const auto &idx_range = idx.equal_range(std::make_tuple(sidechain, true, false));
|
const auto &idx_range = idx.equal_range(std::make_tuple(sidechain, true, false));
|
||||||
|
|
||||||
std::for_each(idx_range.first, idx_range.second, [&](const son_wallet_deposit_object &swdo) {
|
std::for_each(idx_range.first, idx_range.second, [&](const son_wallet_deposit_object &swdo) {
|
||||||
if (swdo.id == object_id_type(0, 0, 0)) {
|
if (swdo.id == object_id_type(0, 0, 0) || !plugin.can_son_participate(chain::operation::tag<chain::son_wallet_deposit_process_operation>::value, swdo.id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Ignore the deposits which are not valid anymore, considered refunds.
|
//Ignore the deposits which are not valid anymore, considered refunds.
|
||||||
|
|
@ -392,6 +402,7 @@ void sidechain_net_handler::process_deposits() {
|
||||||
wlog("Deposit not processed: ${swdo}", ("swdo", swdo));
|
wlog("Deposit not processed: ${swdo}", ("swdo", swdo));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
plugin.log_son_proposal_retry(chain::operation::tag<chain::son_wallet_deposit_process_operation>::value, swdo.id);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -404,7 +415,7 @@ void sidechain_net_handler::process_withdrawals() {
|
||||||
const auto &idx_range = idx.equal_range(std::make_tuple(sidechain, true, false));
|
const auto &idx_range = idx.equal_range(std::make_tuple(sidechain, true, false));
|
||||||
|
|
||||||
std::for_each(idx_range.first, idx_range.second, [&](const son_wallet_withdraw_object &swwo) {
|
std::for_each(idx_range.first, idx_range.second, [&](const son_wallet_withdraw_object &swwo) {
|
||||||
if (swwo.id == object_id_type(0, 0, 0)) {
|
if (swwo.id == object_id_type(0, 0, 0) || !plugin.can_son_participate(chain::operation::tag<chain::son_wallet_withdraw_process_operation>::value, swwo.id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -416,6 +427,7 @@ void sidechain_net_handler::process_withdrawals() {
|
||||||
wlog("Withdraw not processed: ${swwo}", ("swwo", swwo));
|
wlog("Withdraw not processed: ${swwo}", ("swwo", swwo));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
plugin.log_son_proposal_retry(chain::operation::tag<chain::son_wallet_withdraw_process_operation>::value, swwo.id);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -514,6 +526,10 @@ void sidechain_net_handler::settle_sidechain_transactions() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!plugin.can_son_participate(chain::operation::tag<chain::sidechain_transaction_settle_operation>::value, sto.object_id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ilog("Sidechain transaction to settle: ${sto}", ("sto", sto.id));
|
ilog("Sidechain transaction to settle: ${sto}", ("sto", sto.id));
|
||||||
|
|
||||||
int64_t settle_amount = settle_sidechain_transaction(sto);
|
int64_t settle_amount = settle_sidechain_transaction(sto);
|
||||||
|
|
@ -560,6 +576,7 @@ void sidechain_net_handler::settle_sidechain_transactions() {
|
||||||
database.push_transaction(trx, database::validation_steps::skip_block_size_check);
|
database.push_transaction(trx, database::validation_steps::skip_block_size_check);
|
||||||
if (plugin.app().p2p_node())
|
if (plugin.app().p2p_node())
|
||||||
plugin.app().p2p_node()->broadcast(net::trx_message(trx));
|
plugin.app().p2p_node()->broadcast(net::trx_message(trx));
|
||||||
|
plugin.log_son_proposal_retry(chain::operation::tag<chain::sidechain_transaction_settle_operation>::value, sto.object_id);
|
||||||
} catch (fc::exception &e) {
|
} catch (fc::exception &e) {
|
||||||
elog("Sending proposal for sidechain transaction settle operation failed with exception ${e}", ("e", e.what()));
|
elog("Sending proposal for sidechain transaction settle operation failed with exception ${e}", ("e", e.what()));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1005,7 +1005,7 @@ bool sidechain_net_handler_bitcoin::process_proposal(const proposal_object &po)
|
||||||
|
|
||||||
int32_t op_idx_1 = -1;
|
int32_t op_idx_1 = -1;
|
||||||
chain::operation op_obj_idx_1;
|
chain::operation op_obj_idx_1;
|
||||||
(void) op_idx_1;
|
(void)op_idx_1;
|
||||||
|
|
||||||
if (po.proposed_transaction.operations.size() >= 2) {
|
if (po.proposed_transaction.operations.size() >= 2) {
|
||||||
op_idx_1 = po.proposed_transaction.operations[1].which();
|
op_idx_1 = po.proposed_transaction.operations[1].which();
|
||||||
|
|
@ -1287,6 +1287,9 @@ void sidechain_net_handler_bitcoin::process_primary_wallet() {
|
||||||
boost::property_tree::ptree active_pw_pt;
|
boost::property_tree::ptree active_pw_pt;
|
||||||
boost::property_tree::read_json(active_pw_ss, active_pw_pt);
|
boost::property_tree::read_json(active_pw_ss, active_pw_pt);
|
||||||
if (active_pw_pt.count("error") && active_pw_pt.get_child("error").empty()) {
|
if (active_pw_pt.count("error") && active_pw_pt.get_child("error").empty()) {
|
||||||
|
if (!plugin.can_son_participate(chain::operation::tag<chain::son_wallet_update_operation>::value, active_sw->id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
proposal_create_operation proposal_op;
|
proposal_create_operation proposal_op;
|
||||||
proposal_op.fee_paying_account = plugin.get_current_son_object().son_account;
|
proposal_op.fee_paying_account = plugin.get_current_son_object().son_account;
|
||||||
|
|
@ -1325,6 +1328,7 @@ void sidechain_net_handler_bitcoin::process_primary_wallet() {
|
||||||
database.push_transaction(trx, database::validation_steps::skip_block_size_check);
|
database.push_transaction(trx, database::validation_steps::skip_block_size_check);
|
||||||
if (plugin.app().p2p_node())
|
if (plugin.app().p2p_node())
|
||||||
plugin.app().p2p_node()->broadcast(net::trx_message(trx));
|
plugin.app().p2p_node()->broadcast(net::trx_message(trx));
|
||||||
|
plugin.log_son_proposal_retry(chain::operation::tag<chain::son_wallet_update_operation>::value, active_sw->id);
|
||||||
} catch (fc::exception &e) {
|
} catch (fc::exception &e) {
|
||||||
elog("Sending proposal for son wallet update operation failed with exception ${e}", ("e", e.what()));
|
elog("Sending proposal for son wallet update operation failed with exception ${e}", ("e", e.what()));
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,7 @@ class wallet_api
|
||||||
*/
|
*/
|
||||||
variant_object about() const;
|
variant_object about() const;
|
||||||
optional<signed_block_with_info> get_block( uint32_t num );
|
optional<signed_block_with_info> get_block( uint32_t num );
|
||||||
|
vector<optional<signed_block>> get_blocks(uint32_t block_num_from, uint32_t block_num_to)const;
|
||||||
/** Returns the number of accounts registered on the blockchain
|
/** Returns the number of accounts registered on the blockchain
|
||||||
* @returns the number of registered accounts
|
* @returns the number of registered accounts
|
||||||
*/
|
*/
|
||||||
|
|
@ -1956,32 +1957,6 @@ class wallet_api
|
||||||
bool broadcast /* = false */
|
bool broadcast /* = false */
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Get random numbers
|
|
||||||
* @brief Returns the random number
|
|
||||||
* @param minimum Lower bound of segment containing random number
|
|
||||||
* @param maximum Upper bound of segment containing random number
|
|
||||||
* @param selections Number of random numbers to return
|
|
||||||
* @param duplicates Allow duplicated numbers
|
|
||||||
* @param broadcast true if you wish to broadcast the transaction
|
|
||||||
* @return the signed version of the transaction
|
|
||||||
* @return Vector containing random numbers from segment [minimum, maximum)
|
|
||||||
*/
|
|
||||||
vector<uint64_t> get_random_number_ex(string account,
|
|
||||||
uint64_t minimum,
|
|
||||||
uint64_t maximum,
|
|
||||||
uint64_t selections,
|
|
||||||
bool duplicates,
|
|
||||||
bool broadcast);
|
|
||||||
|
|
||||||
/** Get random number
|
|
||||||
* @brief Returns the random number
|
|
||||||
* @param bound Upper bound of segment containing random number
|
|
||||||
* @return Random number from segment [0, bound)
|
|
||||||
*/
|
|
||||||
uint64_t get_random_number(string account,
|
|
||||||
uint64_t bound,
|
|
||||||
bool broadcast);
|
|
||||||
|
|
||||||
order_book get_order_book( const string& base, const string& quote, unsigned limit = 50);
|
order_book get_order_book( const string& base, const string& quote, unsigned limit = 50);
|
||||||
|
|
||||||
asset get_total_matched_bet_amount_for_betting_market_group(betting_market_group_id_type group_id);
|
asset get_total_matched_bet_amount_for_betting_market_group(betting_market_group_id_type group_id);
|
||||||
|
|
@ -2652,6 +2627,7 @@ FC_API( graphene::wallet::wallet_api,
|
||||||
(get_account)
|
(get_account)
|
||||||
(get_account_id)
|
(get_account_id)
|
||||||
(get_block)
|
(get_block)
|
||||||
|
(get_blocks)
|
||||||
(get_account_count)
|
(get_account_count)
|
||||||
(get_account_history)
|
(get_account_history)
|
||||||
(get_relative_account_history)
|
(get_relative_account_history)
|
||||||
|
|
@ -2678,8 +2654,6 @@ FC_API( graphene::wallet::wallet_api,
|
||||||
(propose_fee_change)
|
(propose_fee_change)
|
||||||
(propose_dividend_asset_update)
|
(propose_dividend_asset_update)
|
||||||
(approve_proposal)
|
(approve_proposal)
|
||||||
(get_random_number_ex)
|
|
||||||
(get_random_number)
|
|
||||||
(dbg_make_uia)
|
(dbg_make_uia)
|
||||||
(dbg_make_mia)
|
(dbg_make_mia)
|
||||||
(dbg_push_blocks)
|
(dbg_push_blocks)
|
||||||
|
|
|
||||||
|
|
@ -3866,38 +3866,6 @@ public:
|
||||||
return _remote_db->get_active_custom_account_authorities_by_operation(get_account(owner).id, operation_type);
|
return _remote_db->get_active_custom_account_authorities_by_operation(get_account(owner).id, operation_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<uint64_t> get_random_number_ex(string account,
|
|
||||||
uint64_t minimum,
|
|
||||||
uint64_t maximum,
|
|
||||||
uint64_t selections,
|
|
||||||
bool duplicates,
|
|
||||||
bool broadcast)
|
|
||||||
{
|
|
||||||
|
|
||||||
vector<uint64_t> v = _remote_db->get_random_number_ex(minimum, maximum, selections, duplicates);
|
|
||||||
|
|
||||||
random_number_store_operation op;
|
|
||||||
op.account = get_account(account).id;
|
|
||||||
op.random_number = v;
|
|
||||||
op.data = "";
|
|
||||||
|
|
||||||
signed_transaction trx;
|
|
||||||
trx.operations.push_back(op);
|
|
||||||
set_operation_fees( trx, _remote_db->get_global_properties().parameters.current_fees );
|
|
||||||
trx.validate();
|
|
||||||
sign_transaction( trx, broadcast );
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t get_random_number(string account,
|
|
||||||
uint64_t bound,
|
|
||||||
bool broadcast)
|
|
||||||
{
|
|
||||||
vector<uint64_t> v = get_random_number_ex(account, 0, bound, 1, false, broadcast);
|
|
||||||
return v.at(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void dbg_make_uia(string creator, string symbol)
|
void dbg_make_uia(string creator, string symbol)
|
||||||
{
|
{
|
||||||
asset_options opts;
|
asset_options opts;
|
||||||
|
|
@ -4351,6 +4319,11 @@ optional<signed_block_with_info> wallet_api::get_block(uint32_t num)
|
||||||
return my->_remote_db->get_block(num);
|
return my->_remote_db->get_block(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<optional<signed_block>> wallet_api::get_blocks(uint32_t block_num_from, uint32_t block_num_to) const
|
||||||
|
{
|
||||||
|
return my->_remote_db->get_blocks(block_num_from, block_num_to);
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t wallet_api::get_account_count() const
|
uint64_t wallet_api::get_account_count() const
|
||||||
{
|
{
|
||||||
return my->_remote_db->get_account_count();
|
return my->_remote_db->get_account_count();
|
||||||
|
|
@ -5439,23 +5412,6 @@ vector<authority> wallet_api::get_active_custom_account_authorities_by_operation
|
||||||
return my->get_active_custom_account_authorities_by_operation(owner, operation_type);
|
return my->get_active_custom_account_authorities_by_operation(owner, operation_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<uint64_t> wallet_api::get_random_number_ex(string account,
|
|
||||||
uint64_t minimum,
|
|
||||||
uint64_t maximum,
|
|
||||||
uint64_t selections,
|
|
||||||
bool duplicates,
|
|
||||||
bool broadcast)
|
|
||||||
{
|
|
||||||
return my->get_random_number_ex( account, minimum, maximum, selections, duplicates, broadcast );
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t wallet_api::get_random_number(string account,
|
|
||||||
uint64_t bound,
|
|
||||||
bool broadcast)
|
|
||||||
{
|
|
||||||
return my->get_random_number( account, bound, broadcast );
|
|
||||||
}
|
|
||||||
|
|
||||||
global_property_object wallet_api::get_global_properties() const
|
global_property_object wallet_api::get_global_properties() const
|
||||||
{
|
{
|
||||||
return my->get_global_properties();
|
return my->get_global_properties();
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include <fc/rpc/cli.hpp>
|
#include <fc/rpc/cli.hpp>
|
||||||
#include <fc/rpc/http_api.hpp>
|
#include <fc/rpc/http_api.hpp>
|
||||||
#include <fc/rpc/websocket_api.hpp>
|
#include <fc/rpc/websocket_api.hpp>
|
||||||
|
#include <fc/smart_ref_impl.hpp>
|
||||||
|
|
||||||
#include <graphene/app/api.hpp>
|
#include <graphene/app/api.hpp>
|
||||||
#include <graphene/chain/config.hpp>
|
#include <graphene/chain/config.hpp>
|
||||||
|
|
@ -74,6 +75,7 @@ int main( int argc, char** argv )
|
||||||
boost::program_options::options_description opts;
|
boost::program_options::options_description opts;
|
||||||
opts.add_options()
|
opts.add_options()
|
||||||
("help,h", "Print this help message and exit.")
|
("help,h", "Print this help message and exit.")
|
||||||
|
("version", "Display the version info and exit")
|
||||||
("server-rpc-endpoint,s", bpo::value<string>()->implicit_value("ws://127.0.0.1:8090"), "Server websocket RPC endpoint")
|
("server-rpc-endpoint,s", bpo::value<string>()->implicit_value("ws://127.0.0.1:8090"), "Server websocket RPC endpoint")
|
||||||
("server-rpc-user,u", bpo::value<string>(), "Server Username")
|
("server-rpc-user,u", bpo::value<string>(), "Server Username")
|
||||||
("server-rpc-password,p", bpo::value<string>(), "Server Password")
|
("server-rpc-password,p", bpo::value<string>(), "Server Password")
|
||||||
|
|
@ -95,6 +97,20 @@ int main( int argc, char** argv )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.count("version"))
|
||||||
|
{
|
||||||
|
std::string wallet_version(graphene::utilities::git_revision_description);
|
||||||
|
const size_t pos = wallet_version.find('/');
|
||||||
|
if( pos != std::string::npos && wallet_version.size() > pos )
|
||||||
|
wallet_version = wallet_version.substr( pos + 1 );
|
||||||
|
std::cerr << "Version: " << wallet_version << "\n";
|
||||||
|
std::cerr << "Git Revision: " << graphene::utilities::git_revision_sha << "\n";
|
||||||
|
std::cerr << "Built: " << __DATE__ " at " __TIME__ << "\n";
|
||||||
|
std::cout << "SSL: " << OPENSSL_VERSION_TEXT << "\n";
|
||||||
|
std::cout << "Boost: " << boost::replace_all_copy(std::string(BOOST_LIB_VERSION), "_", ".") << "\n";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
fc::path data_dir;
|
fc::path data_dir;
|
||||||
fc::logging_config cfg;
|
fc::logging_config cfg;
|
||||||
fc::path log_dir = data_dir / "logs";
|
fc::path log_dir = data_dir / "logs";
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ BOOST_AUTO_TEST_CASE(lottery_idx_test)
|
||||||
{
|
{
|
||||||
if (!met_not_active && (!test_itr->is_lottery() || !test_itr->lottery_data->lottery_options.is_active))
|
if (!met_not_active && (!test_itr->is_lottery() || !test_itr->lottery_data->lottery_options.is_active))
|
||||||
met_not_active = true;
|
met_not_active = true;
|
||||||
FC_ASSERT(!met_not_active || met_not_active && (!test_itr->is_lottery() || !test_itr->lottery_data->lottery_options.is_active), "MET ACTIVE LOTTERY AFTER NOT ACTIVE");
|
FC_ASSERT((!met_not_active) || (met_not_active && (!test_itr->is_lottery() || !test_itr->lottery_data->lottery_options.is_active)), "MET ACTIVE LOTTERY AFTER NOT ACTIVE");
|
||||||
++test_itr;
|
++test_itr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue