WT library
编译
需要 boost 库支持 > 1.50
编译 boost 库1.64
Download source file from: http://www.boost.org/users/history/version_1_64_0.html |
编译 WT 4.0.4
cd wt-x.y.z |
需要 boost 库支持 > 1.50
Download source file from: http://www.boost.org/users/history/version_1_64_0.html |
cd wt-x.y.z |
使用全节点的 RPC 命令来获取模板和提交新块。使用中间件做服务。
基于 primecoin-core 0.16.1 版本。
需要修改一个地方就是,primecoin 限制每笔交易的 vout 数额不能小于 0.01xpm
Primecoin: minimul txout value.
static const CAmount MIN_TXOUT_AMOUNT = 1000000;
支持 segwit 不能有这个限制。看代码 segwit 会在 coinbase 里面创建一个 0 value 的 txout 交易输出。
具体原因和作用暂时没看。先弄 pool 实现。
tyler@ubuntu16:~/Documents/primecoin-core-desktop-src$ ./src/primecoin-cli -rpcuser=user -rpcpassword=password getblocktemplate '{"capabilities":["longpoll", "coinbasetxn", "coinbasevalue"]}' |
下面的作废,使用新思路
参考 madMax 的代码实现,引用库的升级,primecoin 版本使用 0.16.1。
后面需要使用 bitcoin 的 depends 里面的 make 来编译。目前先手动操作。
boost 1.64
WT 4.0.4
postgresql 10.5
zmq 4.2.2
czmq 4.1.1
lz4 1.8.3
Boost 1.64 requires CMake 3.8 or newer.
default directory: /usr/local/bin/
./bootstrap |
need close current console and open another one, type cmake -version check result
为啥 zmq 的文档找起来这么费劲,4.0.x
// Create a new socket within our CZMQ context, replaces zmq_socket. |
// Bind a socket to a formatted endpoint. If the port is specified as |
// This is a stable class, and may not change except for emergencies. It |
// Create an attached thread. An attached thread gets a ctx and a PAIR |
// Wait on a signal. Use this to coordinate between threads, over |
在当前线程内开始ZMQ内置代理。
代理将一个前端socket连接到一个后端。一般来说,数据会从前端流向后端。根据socket的类型,数据可能向相反的方向流动。方向指示概念上的;代理是完全对称的,在技术上前端和后端没有什么区别。
zmq_proxy()函数在当前的线程空间中运行,并且只有在当前使用的context被关闭之后才会返回。
// This port range is defined by IANA for dynamic or private ports |
ubuntu 14.04 版本下编译,
ubuntu 16.04 compile linux version success
windows version use windows7 compile success
修改版本
primecoin-qt.pro
share/setup.nsi
share/genbuild.sh
src/clientversion.h (change CLIENT_VERSION_IS_RELEASE to true)
下面的文件是生成的地方。undefine 两个判断宏
src/version.cpp
class Singleton { |
不要接近峨眉山的和尚
不要接近崂山的道士
不要买九寨沟的牦牛肉
不要买三峡船上的玉器珠宝
不要在西双版纳参加“抢亲”游戏
不要在西安的古玩一条街购买古物
不要在大理购买所谓“老乡”的便宜珠宝
不要在阳朔的酒吧里消费
不要招惹泰山景区的当地人
不要参观少林寺时走“捷径”
不要逛十三陵玉石店
不要单独去海南旅游
不要在坝上草原骑马
不要在吐鲁番买葡萄
不要在深圳中英街购买任何物品
不要参加北京当地的长城一日游
不要在张家界住便宜小旅馆
不要在井冈山为“老区建设”捐款
不要在杭州的娱乐场所消费
不要在苏州的茶楼喝茶
不要在丰都鬼城照“免费”像
不要在北海乘坐摩托艇
不要在北戴河吃海鲜
不要在三亚海边接近小商贩
不要随导游在呼伦贝尔草原上吃烤全羊
不要在庐山乘个体出租车上山
不要在宏村的路上坐出租车
不要去黄山让人“免费带路”
不要在千岛湖码头的排档吃鱼
不要参观乐山景区周边的付费景点
不要在郑州黄河游览区骑马
不要到恒山算命
不要随旅游团环游青海湖
不要买神农架的土特产
不要在敦煌的夜市吃地摊饭
不要在花果山的海鲜一条街吃饭
不要随导游逛清明上河园
不要在南京做“免费美容”
不要在上海外滩让人给你照数码像
不要买“便宜票”看黄果树瀑布
不要随导游在香港买名表和珠宝
不要投大钱在澳门赌博
不要在威海韩国城购买没经狠杀价的商品
不要在丽江洗桑拿浴
不要到五台山的五爷庙烧香
不要在平遥摸“鱼洗”
不要在武夷山景区买茶叶
不要在白洋淀景区买鸭蛋
不要在乌镇让道士“免费看相”
不要去太阳岛坐“热心人”介绍的船
SELECT u.datname FROM pg_catalog.pg_database u where u.datname='rftDatabase'; |
if( (select 1 from pg_class where relname='test'::name and relkind='r') is null ) then |
docker pull postgres |
sudo apt-get install libreadline-dev |
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下 |
su - postgres |
如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
pointer _Myfirst; // pointer to beginning of array |
大小:size=_Mylast - _Myfirst;
容量:capacity=_Myend - _Myfirst;
分别对应于resize()、reserve()两个函数。
size表示vector中已有元素的个数,容量表示vector最多可存储的元素的个数;为了降低二次分配时的成本,vector实际配置的大小可能比客户需求的更大一些,以备将来扩充,这就是容量的概念。即capacity>=size,当等于时,容器此时已满,若再要加入新的元素时,就要重新进行内存分配,整个vector的数据都要移动到新内存。二次分配成本较高,在实际操作时,应尽量预留一定空间,避免二次分配。
// 通过数组地址初始化 |
std::vector<std::vector<int32_t>> vChess; |
AB.reserve( A.size() + B.size() ); // preallocate memory |
vector_name.insert (position, val) |
void f(vector<int> &v) |
如果 v 非空,A 行和 B 行没有任何区别。如果 v 为空,B行会抛出 std::out_of_range 异常,A 行的行为未定义。
c++ 标准不要求 vector
设计vector是用来代替内置数组的,所以效率问题也应该考虑。不过使用 operator[] 就要自己承担越界风险了。
如果需要下标越界检查,请使用 at。
emplace_back not copy and move object to container
A similar member function exists, push_back, which either copies or moves an existing object into the container
std::vector<BYTE> m_vCmdBuf |
声明:vector
方法一: return vec.at(vec.size()-1);
方法二: return vec.back();
方法三: return vec.end()-1; 注意:end指向末尾元素的下一个元素。
方法四: return vec.rbegin();
vector<int> temlist; |