Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
265afceb
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
265afceb
编写于
6月 23, 2019
作者:
W
Wang Zhi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add storepool concept
上级
7e8dc29b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
331 addition
and
11 deletion
+331
-11
contracts/hddpool/hddpool.abi
contracts/hddpool/hddpool.abi
+162
-2
contracts/hddpool/hddpool.cpp
contracts/hddpool/hddpool.cpp
+120
-8
contracts/hddpool/hddpool.hpp
contracts/hddpool/hddpool.hpp
+49
-1
未找到文件。
contracts/hddpool/hddpool.abi
浏览文件 @
265afceb
...
...
@@ -109,7 +109,53 @@
{
"name": "clearall",
"base": "",
"fields": [
{
"name": "owner",
"type": "name"
}
]
},
{
"name": "clsallpools",
"base": "",
"fields": []
},
{
"name": "regstrpool",
"base": "",
"fields": [
{
"name": "pool_id",
"type": "name"
},
{
"name": "pool_owner",
"type": "name"
},
{
"name": "max_space",
"type": "uint64"
}
]
},
{
"name": "addm2pool",
"base": "",
"fields": [
{
"name": "minerid",
"type": "uint64"
},
{
"name": "pool_id",
"type": "name"
},
{
"name": "minerowner",
"type": "name"
}
]
},
{
"name": "getbalance",
...
...
@@ -197,7 +243,78 @@
"name": "last_hdd_time",
"type": "uint64"
}
]
},
{
"name": "miner2acc",
"base": "",
"fields": [
{
"name": "minerid",
"type": "uint64"
},
{
"name": "owner",
"type": "name"
}
]
},
{
"name": "storepool",
"base": "",
"fields": [
{
"name": "pool_id",
"type": "name"
},
{
"name": "pool_owner",
"type": "name"
},
{
"name": "max_space",
"type": "uint64"
},
{
"name": "space_left",
"type": "uint64"
}
]
},
{
"name": "spoolminers",
"base": "",
"fields": [
{
"name": "pool_id",
"type": "name"
},
{
"name": "miner_id",
"type": "uint64"
},
{
"name": "miner_owner",
"type": "name"
},
{
"name": "space",
"type": "uint64"
}
]
},
{
"name": "miner2pool",
"base": "",
"fields": [
{
"name": "minerid",
"type": "uint64"
},
{
"name": "pool_id",
"type": "name"
}
]
},
{
...
...
@@ -368,7 +485,22 @@
"name": "subhspace",
"type": "subhspace",
"ricardian_contract": ""
}
},
{
"name": "clsallpools",
"type": "clsallpools",
"ricardian_contract": ""
},
{
"name": "regstrpool",
"type": "regstrpool",
"ricardian_contract": ""
},
{
"name": "addm2pool",
"type": "addm2pool",
"ricardian_contract": ""
}
],
"tables": [
{
...
...
@@ -406,6 +538,27 @@
"key_names": [],
"key_types": []
},
{
"name": "storepool",
"type": "storepool",
"index_type": "i64",
"key_names": [],
"key_types": []
},
{
"name": "spoolminers",
"type": "spoolminers",
"index_type": "i64",
"key_names": [],
"key_types": []
},
{
"name": "miner2pool",
"type": "miner2pool",
"index_type": "i64",
"key_names": [],
"key_types": []
},
{
"name": "maccount",
"type": "maccount",
...
...
@@ -413,6 +566,13 @@
"key_names": [],
"key_types": []
},
{
"name": "miner2acc",
"type": "miner2acc",
"index_type": "i64",
"key_names": [],
"key_types": []
},
{
"name": "userhdd",
"type": "userhdd",
...
...
contracts/hddpool/hddpool.cpp
浏览文件 @
265afceb
...
...
@@ -542,10 +542,18 @@ void hddpool::subhspace(name user, uint64_t space, name caller)
void
hddpool
::
newmaccount
(
name
owner
,
uint64_t
minerid
,
name
caller
)
{
eosio_assert
(
is_account
(
owner
),
"owner invalidate"
);
eosio_assert
(
is_account
(
caller
),
"caller not an account
.
"
);
eosio_assert
(
is_bp_account
(
caller
.
value
),
"caller not a BP account
.
"
);
eosio_assert
(
is_account
(
caller
),
"caller not an account"
);
eosio_assert
(
is_bp_account
(
caller
.
value
),
"caller not a BP account"
);
require_auth
(
caller
);
miner2acc_index
_miner2acc
(
_self
,
minerid
);
auto
itminer2acc
=
_miner2acc
.
find
(
minerid
);
eosio_assert
(
itminer2acc
==
_miner2acc
.
end
(),
"minerid already registered
\n
"
);
_miner2acc
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
minerid
=
minerid
;
row
.
owner
=
owner
;
});
//maccount_index _maccount(_self, _self);
maccount_index
_maccount
(
_self
,
owner
.
value
);
if
(
_maccount
.
begin
()
==
_maccount
.
end
())
...
...
@@ -555,7 +563,7 @@ void hddpool::newmaccount(name owner, uint64_t minerid, name caller)
}
auto
it
=
_maccount
.
find
(
minerid
);
eosio_assert
(
it
==
_maccount
.
end
(),
"minerid already exist in maccount table
\n
"
);
eosio_assert
(
it
==
_maccount
.
end
(),
"minerid already exist in maccount table"
);
_maccount
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
minerid
=
minerid
;
...
...
@@ -594,9 +602,24 @@ void hddpool::addmprofit(name owner, uint64_t minerid, uint64_t space, name call
//maccount_index _maccount(_self, _self);
maccount_index
_maccount
(
_self
,
owner
.
value
);
auto
it
=
_maccount
.
find
(
minerid
);
eosio_assert
(
it
!=
_maccount
.
end
(),
"minerid not register
\n
"
);
eosio_assert
(
it
!=
_maccount
.
end
(),
"minerid not register"
);
//name owner = it->owner;
//check store pool's space left -- (is it enough) -- start ----------
miner2pool_index
_miner2pool
(
_self
,
minerid
);
auto
itmminer2pool
=
_miner2pool
.
find
(
minerid
);
if
(
itmminer2pool
!=
_miner2pool
.
end
())
{
storepool_index
_storepool
(
_self
,
_self
);
auto
itstorepool
=
_storepool
.
find
(
itmminer2pool
->
pool_id
.
value
);
if
(
itstorepool
!=
_storepool
.
end
())
{
eosio_assert
(
itstorepool
->
space_left
>=
space
,
"pool space not enough"
);
_storepool
.
modify
(
itstorepool
,
_self
,
[
&
](
auto
&
row
)
{
row
.
space_left
-=
space
;
});
}
}
//check store pool's space left -- (is it enough) -- end ----------
int64_t
profit_delta
=
0
;
//每周期收益 += (生产空间*数据分片大小/1GB)*(记账周期/ 1年)
profit_delta
=
(
int64_t
)(((
double
)(
space
*
data_slice_size
)
/
(
double
)
one_gb
)
*
((
double
)
fee_cycle
/
(
double
)
seconds_in_one_year
)
*
100000000
);
...
...
@@ -677,10 +700,21 @@ void hddpool::calcmbalance(name owner, uint64_t minerid)
});
}
void
hddpool
::
clearall
()
void
hddpool
::
clearall
(
name
owner
)
{
require_auth
(
_self
);
maccount_index
_maccount
(
_self
,
owner
.
value
);
while
(
_maccount
.
begin
()
!=
_maccount
.
end
())
{
auto
itmaccount
=
_maccount
.
begin
();
uint64_t
minerid
=
itmaccount
->
minerid
;
miner2acc_index
_miner2acc
(
_self
,
minerid
);
auto
itminer2acc
=
_miner2acc
.
find
(
minerid
);
if
(
itminer2acc
!=
_miner2acc
.
end
())
{
_miner2acc
.
erase
(
itminer2acc
);
}
_maccount
.
erase
(
_maccount
.
begin
());
}
/*
if(is_bp_account(N(producer1))) {
print( "procuder1 is bp account\n" );
...
...
@@ -706,14 +740,92 @@ void hddpool::clearall()
_maccount.erase(_maccount.begin());
*/
/*
auto itr = _hmarket.find(HDDCORE_SYMBOL_BANCOR);
//print( "check hdd market\n" );
if (itr != _hmarket.end())
{
_hmarket.erase(_hmarket.begin());
}
*/
}
void
hddpool
::
clsallpools
()
{
require_auth
(
_self
);
storepool_index
_storepool
(
_self
,
_self
);
while
(
_storepool
.
begin
()
!=
_storepool
.
end
())
{
auto
itpool
=
_storepool
.
begin
();
name
pool_id
=
itpool
->
pool_id
;
spoolminers_index
_spoolminers
(
_self
,
pool_id
.
value
);
while
(
_spoolminers
.
begin
()
!=
_spoolminers
.
end
())
{
auto
itspollminers
=
_spoolminers
.
begin
();
uint64_t
minerid
=
itspollminers
->
minerid
;
miner2pool_index
_miner2pool
(
_self
,
minerid
);
auto
itminer2pool
=
_miner2pool
.
find
(
minerid
);
if
(
itminer2pool
!=
_miner2pool
.
end
())
{
_miner2pool
.
erase
(
itminer2pool
);
}
_spoolminers
.
erase
(
_spoolminers
.
begin
());
}
_storepool
.
erase
(
_storepool
.
begin
());
}
}
void
hddpool
::
regstrpool
(
name
pool_id
,
name
pool_owner
,
uint64_t
max_space
)
{
storepool_index
_storepool
(
_self
,
_self
);
auto
itmstorepool
=
_storepool
.
find
(
pool_id
.
value
);
eosio_assert
(
itmstorepool
==
_storepool
.
end
(),
"storepool already registered
\n
"
);
_storepool
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
pool_id
=
pool_id
;
row
.
pool_owner
=
pool_owner
;
row
.
max_space
=
max_space
;
row
.
space_left
=
max_space
;
});
}
void
hddpool
::
addm2pool
(
uint64_t
minerid
,
name
pool_id
,
name
minerowner
)
{
//miner2acc_index _miner2acc(_self, minerid);
//auto itminer2acc = _miner2acc.find(minerid);
//eosio_assert(itminer2acc != _miner2acc.end(), "minerid is not registered \n");
miner2pool_index
_miner2pool
(
_self
,
minerid
);
auto
itmminer2pool
=
_miner2pool
.
find
(
minerid
);
eosio_assert
(
itmminer2pool
==
_miner2pool
.
end
(),
"minerid already in a pool"
);
storepool_index
_storepool
(
_self
,
_self
);
auto
itstorepool
=
_storepool
.
find
(
pool_id
.
value
);
eosio_assert
(
itstorepool
!=
_storepool
.
end
(),
"storepool not registered"
);
maccount_index
_maccount
(
_self
,
minerowner
.
value
);
auto
itmaccount
=
_maccount
.
find
(
minerid
);
eosio_assert
(
itmaccount
!=
_maccount
.
end
(),
"minerid not registered"
);
eosio_assert
((
itstorepool
->
space_left
>
0
&&
itstorepool
->
space_left
>
itmaccount
->
space
),
"pool space not enough"
);
_miner2pool
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
minerid
=
minerid
;
row
.
pool_id
=
pool_id
;
});
spoolminers_index
_spoolminers
(
_self
,
pool_id
.
value
);
_spoolminers
.
emplace
(
_self
,
[
&
](
auto
&
row
)
{
row
.
pool_id
=
pool_id
;
row
.
minerid
=
minerid
;
row
.
miner_owner
=
minerowner
;
row
.
space
=
itmaccount
->
space
;
});
_storepool
.
modify
(
itstorepool
,
_self
,
[
&
](
auto
&
row
)
{
row
.
space_left
-=
itmaccount
->
space
;
});
}
bool
hddpool
::
is_bp_account
(
uint64_t
uservalue
)
...
...
@@ -823,4 +935,4 @@ asset exchange_state::convert(asset from, symbol_type to)
return
from
;
}
EOSIO_ABI
(
hddpool
,
(
getbalance
)(
buyhdd
)(
sellhdd
)(
sethfee
)(
subbalance
)(
addhspace
)(
subhspace
)(
newmaccount
)(
addmprofit
)(
clearall
)(
calcmbalance
))
EOSIO_ABI
(
hddpool
,
(
getbalance
)(
buyhdd
)(
sellhdd
)(
sethfee
)(
subbalance
)(
addhspace
)(
subhspace
)(
newmaccount
)(
addmprofit
)(
clearall
)(
calcmbalance
)
(
clsallpools
)(
regstrpool
)(
addm2pool
)
)
contracts/hddpool/hddpool.hpp
浏览文件 @
265afceb
...
...
@@ -65,9 +65,15 @@ public:
void
subhspace
(
name
user
,
uint64_t
space
,
name
caller
);
void
newmaccount
(
name
owner
,
uint64_t
minerid
,
name
caller
);
void
addmprofit
(
name
owner
,
uint64_t
minerid
,
uint64_t
space
,
name
caller
);
void
clearall
();
void
clearall
(
name
owner
);
void
calcmbalance
(
name
owner
,
uint64_t
minerid
);
//store pool related actions -- start
void
clsallpools
();
void
regstrpool
(
name
pool_id
,
name
pool_owner
,
uint64_t
max_space
);
void
addm2pool
(
uint64_t
minerid
,
name
pool_id
,
name
minerowner
);
//store pool related actions -- end
private:
struct
userhdd
{
...
...
@@ -94,6 +100,48 @@ private:
};
typedef
multi_index
<
N
(
maccount
),
maccount
>
maccount_index
;
struct
miner2acc
//scope minerid
{
uint64_t
minerid
;
//矿机id
name
owner
;
//拥有矿机的矿主的账户名
uint64_t
primary_key
()
const
{
return
minerid
;
}
};
typedef
multi_index
<
N
(
miner2acc
),
miner2acc
>
miner2acc_index
;
//store poll tables (scope : self) start -----------------
//store pool
struct
storepool
{
name
pool_id
;
//pool id use eos name type
name
pool_owner
;
//pool owner is a ytachain account
uint64_t
max_space
;
//max space for this pool
uint64_t
space_left
;
//space left for this pool
uint64_t
primary_key
()
const
{
return
pool_id
.
value
;
}
};
typedef
multi_index
<
N
(
storepool
),
storepool
>
storepool_index
;
//storepool's miners ( scope : pool_id )
struct
spoolminers
{
name
pool_id
;
//pool id use eos name type
uint64_t
minerid
;
//矿机id
name
miner_owner
;
//拥有矿机的矿主的账户名
uint64_t
space
;
//矿机的生产空间
uint64_t
primary_key
()
const
{
return
minerid
;
}
};
typedef
multi_index
<
N
(
spoolminers
),
spoolminers
>
spoolminers_index
;
//miner's storepool ( scope : minerid)
struct
miner2pool
{
uint64_t
minerid
;
name
pool_id
;
uint64_t
primary_key
()
const
{
return
minerid
;
}
};
typedef
multi_index
<
N
(
miner2pool
),
miner2pool
>
miner2pool_index
;
//store poll tables (scope : self) end -------------------
struct
hdd_global_state
{
int64_t
hdd_total_balance
=
10000000000
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录