From 6e7610f24abdd82dec3b1bad827db68a7fc7c648 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Fri, 21 Aug 2020 16:37:23 +0700 Subject: [PATCH 1/9] cdb: Implement `oracle_script_requests` table --- chain/emitter/app.go | 2 +- chain/emitter/oracle.go | 15 ++++++++++++++- flusher/flusher/db.py | 8 ++++++++ flusher/flusher/handler.py | 19 +++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/chain/emitter/app.go b/chain/emitter/app.go index c7e0446a54..3ff1022a83 100644 --- a/chain/emitter/app.go +++ b/chain/emitter/app.go @@ -161,7 +161,7 @@ func (app *App) InitChain(req abci.RequestInitChain) abci.ResponseInitChain { app.emitSetDataSource(types.DataSourceID(idx+1), ds, nil) } for idx, os := range oracleState.OracleScripts { - app.emitSetOracleScript(types.OracleScriptID(idx+1), os, nil) + app.emitNewOracleScript(types.OracleScriptID(idx+1), os, nil) } app.FlushMessages() return res diff --git a/chain/emitter/oracle.go b/chain/emitter/oracle.go index d5e0fa1839..616d117dd9 100644 --- a/chain/emitter/oracle.go +++ b/chain/emitter/oracle.go @@ -25,6 +25,19 @@ func (app *App) emitSetDataSource(id types.DataSourceID, ds types.DataSource, tx }) } +func (app *App) emitNewOracleScript(id types.OracleScriptID, os types.OracleScript, txHash []byte) { + app.Write("NEW_ORACLE_SCRIPT", JsDict{ + "id": id, + "name": os.Name, + "description": os.Description, + "owner": os.Owner.String(), + "schema": os.Schema, + "codehash": os.Filename, + "source_code_url": os.SourceCodeURL, + "tx_hash": txHash, + }) +} + func (app *App) emitSetOracleScript(id types.OracleScriptID, os types.OracleScript, txHash []byte) { app.Write("SET_ORACLE_SCRIPT", JsDict{ "id": id, @@ -121,7 +134,7 @@ func (app *App) handleMsgCreateOracleScript( ) { id := types.OracleScriptID(atoi(evMap[types.EventTypeCreateOracleScript+"."+types.AttributeKeyID][0])) os := app.BandApp.OracleKeeper.MustGetOracleScript(app.DeliverContext, id) - app.emitSetOracleScript(id, os, txHash) + app.emitNewOracleScript(id, os, txHash) extra["id"] = id } diff --git a/flusher/flusher/db.py b/flusher/flusher/db.py index 2ffafaf6b2..c7b56e519c 100644 --- a/flusher/flusher/db.py +++ b/flusher/flusher/db.py @@ -348,3 +348,11 @@ def Column(*args, **kwargs): Column("status", sa.Boolean), Column("timestamp", CustomDateTime, primary_key=True), ) + +oracle_script_requests = sa.Table( + "oracle_script_requests", + metadata, + Column("oracle_script_id", sa.Integer, sa.ForeignKey("oracle_scripts.id"), primary_key=True), + Column("count", sa.Integer), +) + diff --git a/flusher/flusher/handler.py b/flusher/flusher/handler.py index f76324f070..cfc7234e14 100644 --- a/flusher/flusher/handler.py +++ b/flusher/flusher/handler.py @@ -27,6 +27,7 @@ reporters, related_data_source_oracle_scripts, historical_oracle_statuses, + oracle_script_requests, ) @@ -84,6 +85,10 @@ def handle_set_data_source(self, msg): .on_conflict_do_update(constraint="data_sources_pkey", set_=msg) ) + def handle_new_oracle_script(self, msg): + self.handle_set_oracle_script(msg) + self.handle_new_oracle_script_request({"oracle_script_id": msg["id"], "count": 0}) + def handle_set_oracle_script(self, msg): if msg["tx_hash"] is not None: msg["transaction_id"] = self.get_transaction_id(msg["tx_hash"]) @@ -100,6 +105,7 @@ def handle_new_request(self, msg): msg["transaction_id"] = self.get_transaction_id(msg["tx_hash"]) del msg["tx_hash"] self.conn.execute(requests.insert(), msg) + self.handle_set_oracle_script_request({"oracle_script_id": msg["oracle_script_id"]}) def handle_update_request(self, msg): condition = True @@ -294,3 +300,16 @@ def handle_set_historical_validator_status(self, msg): .values(**msg) .on_conflict_do_update(constraint="historical_oracle_statuses_pkey", set_=msg) ) + + def handle_new_oracle_script_request(self, msg): + self.conn.execute(oracle_script_requests.insert(), msg) + + def handle_set_oracle_script_request(self, msg): + condition = True + for col in oracle_script_requests.primary_key.columns.values(): + condition = (col == msg[col.name]) & condition + self.conn.execute( + oracle_script_requests.update(condition).values( + count=oracle_script_requests.c.count + 1 + ) + ) From 8ff89c67742c93452961406d921d74205a1184fd Mon Sep 17 00:00:00 2001 From: Sorawit Suriyakarn Date: Fri, 21 Aug 2020 19:37:25 +0700 Subject: [PATCH 2/9] Add notion of report only block poc --- chain/go.mod | 1 + chain/x/oracle/ante/ante.go | 45 +++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/chain/go.mod b/chain/go.mod index eacf87a51c..f473142f68 100644 --- a/chain/go.mod +++ b/chain/go.mod @@ -12,6 +12,7 @@ require ( github.com/golang/protobuf v1.4.2 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/gorilla/mux v1.7.4 + github.com/hashicorp/golang-lru v0.5.4 github.com/kyokomi/emoji v2.2.4+incompatible github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a github.com/oasisprotocol/oasis-core/go v0.0.0-20200730171716-3be2b460b3ac diff --git a/chain/x/oracle/ante/ante.go b/chain/x/oracle/ante/ante.go index 23c5f1294f..9bc5d961ce 100644 --- a/chain/x/oracle/ante/ante.go +++ b/chain/x/oracle/ante/ante.go @@ -1,17 +1,30 @@ package ante import ( + "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + lru "github.com/hashicorp/golang-lru" "github.com/bandprotocol/bandchain/chain/x/oracle" "github.com/bandprotocol/bandchain/chain/x/oracle/keeper" ) -func checkValidReportMsg(ctx sdk.Context, oracleKeeper oracle.Keeper, msg sdk.Msg) bool { - rep, ok := msg.(oracle.MsgReportData) - if !ok { - return false +var ( + repTxCount *lru.Cache + nextRepOnlyBlock int64 +) + +func init() { + var err error + repTxCount, err = lru.New(20000) + if err != nil { + panic(err) } +} + +func checkValidReportMsg(ctx sdk.Context, oracleKeeper oracle.Keeper, rep oracle.MsgReportData) bool { if !oracleKeeper.IsReporter(ctx, rep.Validator, rep.Reporter) { return false } @@ -37,17 +50,35 @@ func checkValidReportMsg(ctx sdk.Context, oracleKeeper oracle.Keeper, msg sdk.Ms return true } -// NewFeelessReportsAnteHandler returns a new ante handler that waives minimum gas price requirement -// if the incoming tx is a valid report transaction. +// NewFeelessReportsAnteHandler returns a new ante handler that waives minimum gas price +// requirement if the incoming tx is a valid report transaction. func NewFeelessReportsAnteHandler(ante sdk.AnteHandler, oracleKeeper oracle.Keeper) sdk.AnteHandler { return func(ctx sdk.Context, tx sdk.Tx, simulate bool) (newCtx sdk.Context, err error) { if ctx.IsCheckTx() && !simulate { + // TODO: Move this out of "FeelessReports" ante handler. + isRepOnlyBlock := ctx.BlockHeight() == nextRepOnlyBlock isValidReportTx := true for _, msg := range tx.GetMsgs() { - if !checkValidReportMsg(ctx, oracleKeeper, msg) { + rep, ok := msg.(oracle.MsgReportData) + if !ok || !checkValidReportMsg(ctx, oracleKeeper, rep) { isValidReportTx = false break } + if !isRepOnlyBlock { + key := fmt.Sprintf("%s:%d", rep.Validator.String(), rep.RequestID) + val, ok := repTxCount.Get(key) + nextVal := 1 + if ok { + nextVal = val.(int) + 1 + } + repTxCount.Add(key, nextVal) + if nextVal > 5 { + nextRepOnlyBlock = ctx.BlockHeight() + 1 + } + } + } + if isRepOnlyBlock && !isValidReportTx { + return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Block reserved for report txs") } if isValidReportTx { minGas := ctx.MinGasPrices() From 1ff66ec30402caf6a5d00f7390fbf38397233ec5 Mon Sep 17 00:00:00 2001 From: Sorawit Suriyakarn Date: Fri, 21 Aug 2020 20:00:57 +0700 Subject: [PATCH 3/9] Enable report only block if pending more than 20 blocks --- chain/x/oracle/ante/ante.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chain/x/oracle/ante/ante.go b/chain/x/oracle/ante/ante.go index 9bc5d961ce..5093145676 100644 --- a/chain/x/oracle/ante/ante.go +++ b/chain/x/oracle/ante/ante.go @@ -72,7 +72,7 @@ func NewFeelessReportsAnteHandler(ante sdk.AnteHandler, oracleKeeper oracle.Keep nextVal = val.(int) + 1 } repTxCount.Add(key, nextVal) - if nextVal > 5 { + if nextVal > 20 { nextRepOnlyBlock = ctx.BlockHeight() + 1 } } From ecca2456f0dc6b4b85695553c777fd5b01d0b795 Mon Sep 17 00:00:00 2001 From: Sorawit Suriyakarn Date: Fri, 21 Aug 2020 20:03:46 +0700 Subject: [PATCH 4/9] Add changelog --- CHANGELOG_UNRELEASED.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 810aaa7319..84eb620fe3 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -12,6 +12,7 @@ ### Chain (Non-consensus) +- (feat) [\#2517](https://github.com/bandprotocol/bandchain/pull/2387) Switch to report only block if notice pending report for too long. - (impv) [\#2387](https://github.com/bandprotocol/bandchain/pull/2387) Implementation of allow free report transaction. ### Yoda From cf7dfa4d740990d146669065ff9aca17f2102062 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Thu, 20 Aug 2020 17:03:56 +0700 Subject: [PATCH 5/9] change request-count-per-days from view to table --- chain/emitter/oracle.go | 1 + flusher/flusher/db.py | 17 +++++++++++++++++ flusher/flusher/handler.py | 24 ++++++++++++++++++++++++ flusher/flusher/init.py | 11 ----------- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/chain/emitter/oracle.go b/chain/emitter/oracle.go index 616d117dd9..f7103aa5ef 100644 --- a/chain/emitter/oracle.go +++ b/chain/emitter/oracle.go @@ -76,6 +76,7 @@ func (app *App) handleMsgRequestData( "sender": msg.Sender.String(), "client_id": msg.ClientID, "resolve_status": types.ResolveStatus_Open, + "timestamp": app.DeliverContext.BlockTime().UnixNano(), }) for _, raw := range req.RawRequests { app.Write("NEW_RAW_REQUEST", JsDict{ diff --git a/flusher/flusher/db.py b/flusher/flusher/db.py index c7b56e519c..51be9e50f4 100644 --- a/flusher/flusher/db.py +++ b/flusher/flusher/db.py @@ -73,6 +73,16 @@ def process_bind_param(self, value, dialect): return b64.decodestring(value.encode()) +class CustomDate(sa.types.TypeDecorator): + """Custom DateTime type that accepts Python nanosecond epoch int.""" + + impl = sa.DateTime + + def process_bind_param(self, value, dialect): + dt = datetime.fromtimestamp(value / 1e9) + return datetime(dt.year, dt.month, dt.day) + + def Column(*args, **kwargs): """Forward into SQLAlchemy's Column construct, but with 'nullable' default to False.""" if "nullable" not in kwargs: @@ -327,6 +337,7 @@ def Column(*args, **kwargs): Column("bonded_tokens", sa.DECIMAL), Column("timestamp", CustomDateTime, primary_key=True), ) + reporters = sa.Table( "reporters", metadata, @@ -356,3 +367,9 @@ def Column(*args, **kwargs): Column("count", sa.Integer), ) +request_count_per_days = sa.Table( + "request_count_per_days", + metadata, + Column("timestamp", CustomDate, primary_key=True), + Column("count", sa.Integer), +) diff --git a/flusher/flusher/handler.py b/flusher/flusher/handler.py index cfc7234e14..c115d52fcb 100644 --- a/flusher/flusher/handler.py +++ b/flusher/flusher/handler.py @@ -28,6 +28,7 @@ related_data_source_oracle_scripts, historical_oracle_statuses, oracle_script_requests, + request_count_per_days, ) @@ -50,6 +51,13 @@ def get_account_id(self, address): select([accounts.c.id]).where(accounts.c.address == address) ).scalar() + def get_request_count(self, timestamp): + return self.conn.execute( + select([request_count_per_days.c.count]).where( + request_count_per_days.c.timestamp == timestamp + ) + ).scalar() + def handle_new_block(self, msg): self.conn.execute(blocks.insert(), msg) @@ -104,6 +112,8 @@ def handle_set_oracle_script(self, msg): def handle_new_request(self, msg): msg["transaction_id"] = self.get_transaction_id(msg["tx_hash"]) del msg["tx_hash"] + self.handle_set_request_count_per_days({"timestamp": msg["timestamp"]}) + del msg["timestamp"] self.conn.execute(requests.insert(), msg) self.handle_set_oracle_script_request({"oracle_script_id": msg["oracle_script_id"]}) @@ -313,3 +323,17 @@ def handle_set_oracle_script_request(self, msg): count=oracle_script_requests.c.count + 1 ) ) + + def handle_set_request_count_per_days(self, msg): + if self.get_request_count(msg["timestamp"]) is None: + msg["count"] = 1 + self.conn.execute(request_count_per_days.insert(), msg) + else: + condition = True + for col in request_count_per_days.primary_key.columns.values(): + condition = (col == msg[col.name]) & condition + self.conn.execute( + request_count_per_days.update(condition).values( + count=request_count_per_days.c.count + 1 + ) + ) diff --git a/flusher/flusher/init.py b/flusher/flusher/init.py index ed9906175e..5868b672ce 100644 --- a/flusher/flusher/init.py +++ b/flusher/flusher/init.py @@ -55,15 +55,6 @@ def init(chain_id, topic, db): WHERE block_height > (SELECT MAX(height) from blocks) - 10000 GROUP BY consensus_address, voted;""" ) - engine.execute( - """CREATE VIEW request_count_1day AS - SELECT date_trunc('day', blocks.timestamp) as date, COUNT(*) as request_count - FROM blocks - JOIN transactions ON blocks.height = transactions.block_height - JOIN requests ON requests.transaction_id = transactions.id - GROUP BY date; - """ - ) engine.execute( """CREATE VIEW oracle_script_statistic_last_1_day AS SELECT @@ -77,7 +68,6 @@ def init(chain_id, topic, db): GROUP BY oracle_scripts.id, requests.resolve_status; """ ) - engine.execute( """CREATE VIEW oracle_script_statistic_last_1_week AS SELECT @@ -91,7 +81,6 @@ def init(chain_id, topic, db): GROUP BY oracle_scripts.id, requests.resolve_status; """ ) - engine.execute( """CREATE VIEW oracle_script_statistic_last_1_month AS SELECT From f520f0b8a508b6f9779e08f63fce2edc576dee46 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Thu, 20 Aug 2020 17:06:18 +0700 Subject: [PATCH 6/9] update change log --- CHANGELOG_UNRELEASED.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 2855cda2fc..3dfbd6d1f3 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -20,6 +20,7 @@ ### Emitter & Flusher +- (impv) [\#2504](https://github.com/bandprotocol/bandchain/pull/2504) Change request-count-per-days from view to table - (bugs) [\#2505](https://github.com/bandprotocol/bandchain/pull/2505) fix bug related ds os table. - (feat) [\#2476](https://github.com/bandprotocol/bandchain/pull/2476) Implemented `historical_bonded_token_on_validators` table - (impv) [\#2495](https://github.com/bandprotocol/bandchain/pull/2495) Implemented `historical_oracle_statuses` table From c3bcf25e81cb270eb02676275e4243d4a42ff4d3 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Fri, 21 Aug 2020 16:44:03 +0700 Subject: [PATCH 7/9] fix as comment --- flusher/flusher/db.py | 8 ++++---- flusher/flusher/handler.py | 10 ++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/flusher/flusher/db.py b/flusher/flusher/db.py index 51be9e50f4..094ca4acfe 100644 --- a/flusher/flusher/db.py +++ b/flusher/flusher/db.py @@ -1,5 +1,5 @@ import base64 as b64 -from datetime import datetime +from datetime import datetime, date import sqlalchemy as sa import enum @@ -76,11 +76,11 @@ def process_bind_param(self, value, dialect): class CustomDate(sa.types.TypeDecorator): """Custom DateTime type that accepts Python nanosecond epoch int.""" - impl = sa.DateTime + impl = sa.Date def process_bind_param(self, value, dialect): dt = datetime.fromtimestamp(value / 1e9) - return datetime(dt.year, dt.month, dt.day) + return date(dt.year, dt.month, dt.day) def Column(*args, **kwargs): @@ -370,6 +370,6 @@ def Column(*args, **kwargs): request_count_per_days = sa.Table( "request_count_per_days", metadata, - Column("timestamp", CustomDate, primary_key=True), + Column("date", CustomDate, primary_key=True), Column("count", sa.Integer), ) diff --git a/flusher/flusher/handler.py b/flusher/flusher/handler.py index c115d52fcb..e27165d8c6 100644 --- a/flusher/flusher/handler.py +++ b/flusher/flusher/handler.py @@ -51,11 +51,9 @@ def get_account_id(self, address): select([accounts.c.id]).where(accounts.c.address == address) ).scalar() - def get_request_count(self, timestamp): + def get_request_count(self, date): return self.conn.execute( - select([request_count_per_days.c.count]).where( - request_count_per_days.c.timestamp == timestamp - ) + select([request_count_per_days.c.count]).where(request_count_per_days.c.date == date) ).scalar() def handle_new_block(self, msg): @@ -112,7 +110,7 @@ def handle_set_oracle_script(self, msg): def handle_new_request(self, msg): msg["transaction_id"] = self.get_transaction_id(msg["tx_hash"]) del msg["tx_hash"] - self.handle_set_request_count_per_days({"timestamp": msg["timestamp"]}) + self.handle_set_request_count_per_days({"date": msg["timestamp"]}) del msg["timestamp"] self.conn.execute(requests.insert(), msg) self.handle_set_oracle_script_request({"oracle_script_id": msg["oracle_script_id"]}) @@ -325,7 +323,7 @@ def handle_set_oracle_script_request(self, msg): ) def handle_set_request_count_per_days(self, msg): - if self.get_request_count(msg["timestamp"]) is None: + if self.get_request_count(msg["date"]) is None: msg["count"] = 1 self.conn.execute(request_count_per_days.insert(), msg) else: From a34f73c7c8a56edb4c0360725d970180b9869d86 Mon Sep 17 00:00:00 2001 From: Nattharat Wiriyakulnan Date: Fri, 21 Aug 2020 20:00:57 +0700 Subject: [PATCH 8/9] update db.py --- flusher/flusher/db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flusher/flusher/db.py b/flusher/flusher/db.py index 094ca4acfe..50aa88931a 100644 --- a/flusher/flusher/db.py +++ b/flusher/flusher/db.py @@ -74,7 +74,7 @@ def process_bind_param(self, value, dialect): class CustomDate(sa.types.TypeDecorator): - """Custom DateTime type that accepts Python nanosecond epoch int.""" + """Custom Date type that accepts Python nanosecond epoch int.""" impl = sa.Date From 173bf6b5bbe9b791bf06c33ec260e8ca5c25702c Mon Sep 17 00:00:00 2001 From: taobun Date: Fri, 21 Aug 2020 20:31:41 +0700 Subject: [PATCH 9/9] Update changelog --- CHANGELOG.md | 52 +++++++++++++++++++++++++++++++++++++++++ CHANGELOG_UNRELEASED.md | 38 ------------------------------ 2 files changed, 52 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdbd685917..bf09bbd085 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,58 @@ # Changelog +## [v1.2.2](https://github.com/bandprotocol/bandchain/releases/tag/v1.2.2) + +### Chain (Non-consensus) + +- (feat) [\#2517](https://github.com/bandprotocol/bandchain/pull/2387) Switch to report only block if notice pending report for too long. +- (impv) [\#2387](https://github.com/bandprotocol/bandchain/pull/2387) Implementation of allow free report transaction. + +### Yoda + +- (feat) [\#2484](https://github.com/bandprotocol/bandchain/pull/2484) yoda/runtime: Add verification environment variables + +### Emitter & Flusher + +- (impv) [\#2504](https://github.com/bandprotocol/bandchain/pull/2504) Change request-count-per-days from view to table +- (bugs) [\#2505](https://github.com/bandprotocol/bandchain/pull/2505) fix bug related ds os table. +- (feat) [\#2476](https://github.com/bandprotocol/bandchain/pull/2476) Implemented `historical_bonded_token_on_validators` table +- (impv) [\#2495](https://github.com/bandprotocol/bandchain/pull/2495) Implemented `historical_oracle_statuses` table +- (impv) [\#2452](https://github.com/bandprotocol/bandchain/pull/2452) Implemented view table to calculate oracle script response time +- (impv) [\#2486](https://github.com/bandprotocol/bandchain/pull/2486) Implemented reporters table. +- (impv) [\#2475](https://github.com/bandprotocol/bandchain/pull/2475) Add related data source and oracle script table. +- (impv) [\#2450](https://github.com/bandprotocol/bandchain/pull/2450) Add request count 1day view table. + +### Scan + +- (impv) [\#2513](https://github.com/bandprotocol/bandchain/pull/2513) Implemented reporters table +- (impv) [\#2511](https://github.com/bandprotocol/bandchain/pull/2511) Implemented report chart and oracle data reports tab +- (impv) [\#2508](https://github.com/bandprotocol/bandchain/pull/2508) Implemented Your delegation info +- (impv) [\#2503](https://github.com/bandprotocol/bandchain/pull/2503) Implemented Bonded Token Chart on Validator Index Page +- (impv) [\#2501](https://github.com/bandprotocol/bandchain/pull/2501) Implemented Request Index Page +- (impv) [\#2500](https://github.com/bandprotocol/bandchain/pull/2500) Implemented Delegators and ProposedBlock tabs +- (impv) [\#2497](https://github.com/bandprotocol/bandchain/pull/2497) Implemented validator index top part and uptimechart +- (impv) [\#2493](https://github.com/bandprotocol/bandchain/pull/2493) Implemented requests table for all requests page +- (impv) [\#2492](https://github.com/bandprotocol/bandchain/pull/2492) Implemented OC index Top part, and patched padding bottom to section +- (impv) [\#2491](https://github.com/bandprotocol/bandchain/pull/2491) Patched latest Txs and Blocks. +- (impv) [\#2487](https://github.com/bandprotocol/bandchain/pull/2487) Updated OC requests tab on OC index page +- (impv) [\#2485](https://github.com/bandprotocol/bandchain/pull/2485) Implemented make a request tab on OC index +- (feat) [\#2482](https://github.com/bandprotocol/bandchain/pull/2482) Implemented latest requests. +- (impv) [\#2481](https://github.com/bandprotocol/bandchain/pull/2481) Patched `ChainInfoHighlight` for revamp version. +- (impv) [\#2478](https://github.com/bandprotocol/bandchain/pull/2478) Implemented New Header (aka TopBar), Navbar and Profile. +- (impv) [\#2474](https://github.com/bandprotocol/bandchain/pull/2474) Implemented bride code tab for OC index page and added FontAwesome library with Icon component(it's from Peach) +- (impv) [\#2473](https://github.com/bandprotocol/bandchain/pull/2473) Implemented OWASM code tab for OC index page, improved some components +- (impv) [\#2471](https://github.com/bandprotocol/bandchain/pull/2471) Implemented the all oraclescripts page and refactor some part +- (impv) [\#2456](https://github.com/bandprotocol/bandchain/pull/2456) Changed exit_code and external_id from int to string + +### Oracle Binary Encoding (OBI) + +- (impv) [\#2410](https://github.com/bandprotocol/bandchain/pull/2410) Improve code structure, Add PyObiBool and add more tests + +### Helpers + +- (feat) [\#2498](https://github.com/bandprotocol/bandchain/pull/2498) Implement wallet module + ## [v1.2.1](https://github.com/bandprotocol/bandchain/releases/tag/v1.2.1) ### Chain (Non-consensus) diff --git a/CHANGELOG_UNRELEASED.md b/CHANGELOG_UNRELEASED.md index 231b14ddb4..3e291cad0a 100644 --- a/CHANGELOG_UNRELEASED.md +++ b/CHANGELOG_UNRELEASED.md @@ -12,46 +12,12 @@ ### Chain (Non-consensus) -- (feat) [\#2517](https://github.com/bandprotocol/bandchain/pull/2387) Switch to report only block if notice pending report for too long. -- (impv) [\#2387](https://github.com/bandprotocol/bandchain/pull/2387) Implementation of allow free report transaction. - ### Yoda -- (feat) [\#2484](https://github.com/bandprotocol/bandchain/pull/2484) yoda/runtime: Add verification environment variables - ### Emitter & Flusher -- (impv) [\#2504](https://github.com/bandprotocol/bandchain/pull/2504) Change request-count-per-days from view to table -- (bugs) [\#2505](https://github.com/bandprotocol/bandchain/pull/2505) fix bug related ds os table. -- (feat) [\#2476](https://github.com/bandprotocol/bandchain/pull/2476) Implemented `historical_bonded_token_on_validators` table -- (impv) [\#2495](https://github.com/bandprotocol/bandchain/pull/2495) Implemented `historical_oracle_statuses` table -- (impv) [\#2452](https://github.com/bandprotocol/bandchain/pull/2452) Implemented view table to calculate oracle script response time -- (impv) [\#2486](https://github.com/bandprotocol/bandchain/pull/2486) Implemented reporters table. -- (impv) [\#2475](https://github.com/bandprotocol/bandchain/pull/2475) Add related data source and oracle script table. -- (impv) [\#2450](https://github.com/bandprotocol/bandchain/pull/2450) Add request count 1day view table. - ### Scan -- (impv) [\#2513](https://github.com/bandprotocol/bandchain/pull/2513) Implemented reporters table -- (impv) [\#2511](https://github.com/bandprotocol/bandchain/pull/2511) Implemented report chart and oracle data reports tab -- (impv) [\#2508](https://github.com/bandprotocol/bandchain/pull/2508) Implemented Your delegation info -- (impv) [\#2503](https://github.com/bandprotocol/bandchain/pull/2503) Implemented Bonded Token Chart on Validator Index Page -- (impv) [\#2501](https://github.com/bandprotocol/bandchain/pull/2501) Implemented Request Index Page -- (impv) [\#2500](https://github.com/bandprotocol/bandchain/pull/2500) Implemented Delegators and ProposedBlock tabs -- (impv) [\#2497](https://github.com/bandprotocol/bandchain/pull/2497) Implemented validator index top part and uptimechart -- (impv) [\#2493](https://github.com/bandprotocol/bandchain/pull/2493) Implemented requests table for all requests page -- (impv) [\#2492](https://github.com/bandprotocol/bandchain/pull/2492) Implemented OC index Top part, and patched padding bottom to section -- (impv) [\#2491](https://github.com/bandprotocol/bandchain/pull/2491) Patched latest Txs and Blocks. -- (impv) [\#2487](https://github.com/bandprotocol/bandchain/pull/2487) Updated OC requests tab on OC index page -- (impv) [\#2485](https://github.com/bandprotocol/bandchain/pull/2485) Implemented make a request tab on OC index -- (feat) [\#2482](https://github.com/bandprotocol/bandchain/pull/2482) Implemented latest requests. -- (impv) [\#2481](https://github.com/bandprotocol/bandchain/pull/2481) Patched `ChainInfoHighlight` for revamp version. -- (impv) [\#2478](https://github.com/bandprotocol/bandchain/pull/2478) Implemented New Header (aka TopBar), Navbar and Profile. -- (impv) [\#2474](https://github.com/bandprotocol/bandchain/pull/2474) Implemented bride code tab for OC index page and added FontAwesome library with Icon component(it's from Peach) -- (impv) [\#2473](https://github.com/bandprotocol/bandchain/pull/2473) Implemented OWASM code tab for OC index page, improved some components -- (impv) [\#2471](https://github.com/bandprotocol/bandchain/pull/2471) Implemented the all oraclescripts page and refactor some part -- (impv) [\#2456](https://github.com/bandprotocol/bandchain/pull/2456) Changed exit_code and external_id from int to string - ### Bridges ### Runtime @@ -60,10 +26,6 @@ ### Oracle Binary Encoding (OBI) -- (impv) [\#2410](https://github.com/bandprotocol/bandchain/pull/2410) Improve code structure, Add PyObiBool and add more tests - ### Helpers -- (feat) [\#2498](https://github.com/bandprotocol/bandchain/pull/2498) Implement wallet module - ### MISC