This release contains a wasmer version bump from v2.0.0 to v2.2.1. The wasm caches of these two versions are not compatible, thus rebuilding is required. To avoid possible sync delays due to the runtime rebuilding overhead, it is highly recommended that node operators rebuild their wasm cache with the cosmwasm-cache-rebuilder before replacing terrad runtime to v0.5.18.
Node upgrade instructions
- Rebuild your wasm cache using the cosmwasm-cache-rebuilder. This rebuilder can be run simultaneously without killing a running terrad process.
- You can ignore the file already open error. If other errors occur (no disk space, etc), it is safe to run the rebuilder multiple times.
- When the rebuilder is finished, update terrad to v0.5.18 and restart.
- The rebuilder creates a
$TERRA_HOME/data/wasm/cache/modules/v3-wasmer1
directory. The$TERRA_HOME/data/wasm/cache/modules/v1
can be deleted after updating terrad to v0.5.18.
Additional notes
- 🎉 Wasmer v2.2 supports the much anticipated Apple M1 processor! (See: https://wasmer.io/posts/wasmer-2.2) This means nodes can be run on any arm64 system, such as Apple Silicon machines and AWS Graviton2 Arm64.
- #690 Fix wasm memory leak and module drop order. (edited)
This release contains security update.
Details will be shared after checking the status of the validator update.
This release contains security update
- #674 fix to charge gas cost for the key length in wasm execution
columbus-5 | bombay-12 | |
---|---|---|
Height | 6,470,000 | 7,800,000 |
Expected Time | 2022-02-13T15:00:00 (UTC) | 2022-02-11T15:00:00 (UTC) |
This release contains mainly overflow checking enhancement including custom dependency updates.
- #670 audit fix (overflow check)
- #658 cosmos-sdk proto update
- #655 use custom dependency for cosmos-sdk and tendermint
This release contains wasmvm bugfix to prevent non-deterministic error messages comes out from wasmvm.
- #635 bump wasmvm to v0.16.3
This release contains oracle tally bugfix, which was not sorting cross rate ballot before computing weighted median. It makes the cross rate selected quite randomly...
This update will sort cross rate ballot before computing weighted median value.
- b073fb1 sort cross rate ballot and enforce sorted before computing weighted median
This release contains IAVL bugfix
- #620 bump SDK to v0.44.5
- #603 bump CosmWasm/wasmvm to v0.16.2 to fix cache position error
- #601 revert readvm-pool feature
- #594 bump SDK to v0.44.3 and Tendermint to v0.34.14
- #593 revert jemalloc integration from wasmvm & add troubleshoot section to docs
- #588 - fix wasm external querier to use single wasmvm with context value
- #584 - security update
- #586 - memory leak fix
- #583 - ibc ante handler to prevent duplicated packet relaying
This release mainly contains CosmosSDK security updates
- #578 Bump CosmosSDK to v0.44.2
- #576 Change write-vm-memory-cache-size default config replace location
- #573 Fix to distribute oracle rewards for all whitelist denoms
This release contains updates for multi-reader thread implementation with necessary dependency updates for multi-reader thread implementation.
- #546 Implement read VM pool
- #564 Legacy tx encode support
- #566 Emit missing wasm tax events.
- #560 Fix migration bug of multisig pubkey which was in v040 auth module migration.
- #539 Bump ibc-go version to v1.0.1 to fix security vulnerability
- #536 Sort migrated map array with key to generate deterministic result
- #529 Bump CosmosSDK to v0.43.0
- #523 Bump CosmosSDK to v0.43.0-rc3 and CosmWasm to v0.16.0
- #520 Implement ContractInfo wasm query interface for the contracts
- #518 Rollback market base pool split
- #507 Bump SDK to v0.43.0-rc0.
- #507 Bump Tendermint to v0.34.11.
- #509 Bump cosmwasm to v0.15.1.
- #467 Split market base pool into mint & burn base pool
- #465 #472 Bump cosmwasm to v0.14.0.
- #477 Burn
reward_weight
ratio of seigniorage instead of redirecting to oracle rewards - 260b41a Redirect swap fees to oracle rewards (distributed over 3 years)
- Bump golang prerequisite from 1.15 to 1.16.
- #497 Fix wasm oracle querier to return Base/Quote exchange rate
- #529 Fix keyring kwallet backend when using with empty wallet.
This release is a hotfix for two high-severity issues.
$ git fetch --all --tags
$ git checkout v0.4.5
$ make install
Target Height: 2,380,000
Tue Mar 30 2021 09:00:00 GMT+0000 (UTC)
Tue Mar 30 2021 01:00:00 GMT-0800 (PST)
Tue Mar 30 2021 18:00:00 GMT+0900 (KST)
Target Height: 3,150,000
Tue Mar 25 2021 09:00:00 GMT+0000 (UTC)
Tue Mar 25 2021 01:00:00 GMT-0800 (PST)
Tue Mar 25 2021 18:00:00 GMT+0900 (KST)
- #461 Update Dockerfile script to use proper libgo_cosmwasm_musla.a file
- #460 Add
tx-gas-hard-limit
flag to filter out tx with abnormally huge gas
This release is a hotfix for two high-severity issues in the currently live Terra Core@0.4.1.
You can stop, update and restart terrad anytime before the upgrade time.
$ git fetch --all --tags
$ git checkout v0.4.2
$ make install
Target Height: 1,915,199
Tue Feb 23 2021 02:27:50 GMT+0000 (UTC)
Tue Feb 23 2021 11:27:50 GMT+0900 (KST)
Mon Feb 22 2021 18:27:50 GMT-0800 (PST)
This upgrade contains softfork Please understand the details and apply it before the target height.
Upgrade Details Upgrade Instructions
It is softfork, so you can update terrad anytime before the upgrade time.
$ git fetch --all --tags
$ git checkout v0.4.1
$ make install
- Target Height for
columbus-4
: 1200000 - Target Height for
tequila-0004
: 1350000
// MAINNET
// Fri Jan 01 2021 18:00:00 GMT+0900 (KST)
// Fri Jan 01 2021 09:00:00 GMT+0000 (UTC)
// Fri Jan 01 2021 01:00:00 GMT-0800 (PST)
//
// TEQUILA
// Fri Nov 27 2020 12:00:00 GMT+0900 (KST)
// Fri Nov 27 2020 03:00:00 GMT+0000 (UTC)
// Thu Nov 26 2020 19:00:00 GMT-0800 (PST)
- #427 CosmWasm Staking Query
- #433 Increase ExecuteMsgSize limit to 4096 from 1024
- Cosmos-SDK v0.38 Release Notes
- Cosmos-SDK v0.39.0 Release Notes
- Cosmos-SDK v0.39.1 Release Notes
- Cosmos-SDK Breaking Changes
- #407 Allow
gov/MsgVote
to be grantable - #405 CosmWasm oracle exchange rates query interface
- #388 Bump CosmWasm to v0.10.1
- #383 Bump SDK version to v0.39.1
- #374 Bump SDK version to v0.39 and CosmWasm to v0.9.4
- #357 Bump CosmWasm to v0.9
- #352 MsgAuthorization module to allow subkey feature
- #349 Add
--old-hd-path
flag to support 118 coin type users - #348 MsgSwapSend to allow sending all swap coin
- #347 CosmWasm custom msg & querier handler
- #343 Burn Address
- #335 CosmWasm integration
- #325 New oracle msgs for vote process optimization
- #324 Update to emit events at proposal handler
- #323 Bump SDK version to v0.38.x
- #360 Fix market module pool adjustment to apply delta with actual minted amount
- #336 Allow zero tobin tax rate
Any existing keys that were managed via Keybase in prior versions must be migrated. To migrate keys, execute the following:
$ terracli keys migrate [--home] [--keyring-backend]
The above command will provide a prompt for each existing key and ask if you wish for it to be skipped or not. If the key is not to be skipped, you must provide the correct passphrase for it to be migrated successfully.
The operator can now set the pruning options by passing a pruning configuration via command line option or app.toml
. The pruning flag supports the following
options: default
, everything
, nothing
, custom
- see the PR for further details. If the operator chooses custom
, they may want to provide either of the granular pruning values:
pruning-keep-recent
pruning-keep-every
pruning-interval
The former two options dictate how many recent versions are kept on disk and the offset of what versions are kept after that respectively, and the latter defines the height interval in which versions are deleted in a batch.
The operator, who wants to upgrade the node from v0.3 to v0.4, must change pruning option in app.toml
to one of above options.
- The
block_meta
field has been removed from/blocks/{block_height}
becasuse it was redandunt data withblock_header
. - The
whitelist
of/oracle/parameters
response has been changed from[]string
to[]{ name: string; tobin_tax: string; }
99581ba Ledger update(custom ledger library) & Bump SDK to v0.37.13
654b5cb Bump SDK to v0.37.11
7a3d01c Oracle slashing unbonding state check
#338 Bump SDK to v0.37.9 for Tendermint security patch
#319 Bump SDK to v0.37.6
#321 Revert to distribute zero oracle rewards
#313 upgrade SDK
#312 upgrade golangci-lint version to v1.22.2
#303 fix estimate fee endpoint for multiple signature tx
#304 genesis scrpit update
#301 README update
#305 swagger update
#306 circleci update for goreleaser
#265 Oracle refactor & Oracle slashing
A validator get slashed SlashFraction
% if the one perform any of the following violations in SlashWindow - minValidPerWindow
voteperiods over a window of SlashWindow
voteperiods:
- A vote is missing for any of the denom in the whitelist. Oracle voters looking to abstain must still submit a "vote of no confidence", which has 0 for the luna ExchangeRate field of the prevote.
- A submitted vote is more than max(
RewardBand
, standard deviation) from the elected median - Oracle voters who submit abstain vote with other invalid votes will also get slashed.
oracle/MsgDelegateFeederPermission
=>oracle/MsgDelegateFeedConsent
/oracle/voters/{%s}/miss
return the # of vote periods missed in this oracle slash window.
/oracle/denoms/{denom}/price
=>/oracle/denoms/{denom}/exchange_rate
- POST /oracle/denoms/{denom}/prevotes
- POST /oracle/denoms/{denom}/votes
Price sdk.Dec `json:"price"`
has been changed to
ExchangeRate sdk.Dec `json:"exchange_rate"`
#256 Oracle endpoints improvement
/oracle/voters/{validator}/votes
/oracle/voters/{validator}/prevotes
/oracle/denoms/prices
#250 Oracle whitelist & Reward distribution update
- Create a whitelist param that stores an array of denoms that are whitelisted by the protocol.
- Edit the oracle
Reward Pool of a VotePeriod = oracle module account / (n vote periods)
. - Oracle module account is whitelisted in the bank module such that users can donate funds to the oracle module account
#234 Adopt gov module
distribution
module already contains community-pool-spend
proposal suitable for budget
so budget module is removed. There are two custom governance proposals from treasury
module; tax-rate-update
& reward-weight-update
proposals.
(GET)/gov/proposals
(GET)/gov/proposals/{proposalId}
(GET)/gov/proposals/{proposalId}/proposer
(GET)/gov/proposals/{proposalId}/deposits
(GET)/gov/proposals/{proposalId}/deposits/{depositor}
(GET/POST)/gov/proposals/{proposalId}/votes
(GET)/gov/proposals/{proposalId}/votes/{voter}
(GET)/gov/proposals/{proposalId}/tally
(GET)/gov/parameters/deposit
(GET)/gov/parameters/tallying
(GET)/gov/parameters/voting
(POST)/gov/proposals/tax_rate_update
(POST)/gov/proposals/reward_weight_update
(POST)/gov/proposals/param_change
(POST)/gov/proposals/community_pool_spend
#233 Swap constant product
As proposed here, apply constant product to swap feature.
// Both LUNA and TERRA pools are using SDR units.
cp = basePool*basePool
terraPool = (basePool + terraDelta)
lunaPool = cp/terraPool
// offerAmt must be SDR units
newLunaPool = lunaPool + offerAmt
newTerraPool = cp / newLunaPool
returnAmt = newTerraPool - terraPool
// Swap return SDR Amt to TERRA
returnLunaAmt = market.swap(returnAmt, "LUNA")
// offerAmt must be SDR units
newTerraPool = terraPool + offerAmt
newLunaPool = cp / newTerraPool
returnAmt = newLunaPool - lunaPool
// Swap return SDR Amt to proper TERRA
returnTerraAmt = market.swap(returnAmt, "TERRA")
Apply only fixed tobin-tax without computing and changing pools
/market/terra_pool_delta
#231 Bump SDK to v0.37.x
All REST responses now wrap the original resource/result. The response will contain two fields: height and result.
/market/params => /market/parameters
/oracle/params => /oracle/parameters
/treasury/tax-rate => /treasury/tax_rate
/treasury/tax-rate/{epoch} => /treasury/tax_rate/{epoch}
/treasury/tax-cap => /treasury/tax_cap
/treasury/tax-cap/{denom} => /treasury/tax_cap/{denom}
/treasury/reward-weight => /treasury/reward_weight
/treasury/reward-weight/{epoch} => /treasury/reward_weight/{epoch}
/treasury/tax-proceeds => /treasury/tax_proceeds
/treasury/tax-proceeds/{epoch} => /treasury/tax_proceeds/{epoch}
/treasury/seigniorage-proceeds => /treasury/seigniorage_proceeds
/treasury/seigniorage-proceeds/{epoch} => /treasury/seigniorage_proceeds/{epoch}
/treasury/current-epoch => /treasury/current_epoch
/treasury/params => /treasury/parameters
/treasury/current_epoch
/treasury/seigniorage_proceeds/{epoch}
/treasury/seigniorage_proceeds
/treasury/tax_proceeds/{epoch}
/treasury/tax_proceeds
/treasury/reward_weight/{epoch}
/treasury/reward_weight
/treasury/tax_cap/{denom}
/treasury/tax_rate/{epoch}
/treasury/tax_rate
/oracle/denoms/actives
/oracle/denoms/{denom}/price
/oracle/denoms/{denom}/prevotes/{voter}
/oracle/denoms/{denom}/prevotes
/oracle/denoms/{denom}/votes/{voter}
/oracle/denoms/{denom}/votes
/supply/total
/supply/total/{denomination}
/market/last_day_issuance
/oracle/voters/{%s}/voting_info
/oracle/voting_infos
/treasury/historical_issuance/{epoch}
auth/Account => core/Account
auth/StdTx => core/StdTx
pay/MsgSend => bank/MsgSend
pay/MsgMultiSend => bank/MsgMultiSend
- GradedVestingAccount is fully removed
- LazyGradedVestingAccount's vesting_lazy_schedules is changed to vesting_schedules
- Improve the UX of fee and tax. The sender have to specify fees containing tax amount with following methods.
- Use
/bank/accounts/{address}/transfers
without fees.terracli
will compute tax amount and fill fees field containing both gas & tax fee. - Use
/txs/estimate_fee
to estimate fees of StdTX, and replace StdTx.Fee.Amount to estimated fee - Compute tax with
/treasury/tax_rate
&/treasury/tax_cap
add computed tax with original gas fee
- Use
#196 peek epoch seigniorage
Change PeekEpochSeigniorage to compute seigniorage by subtracting current issuance from previous issuance
#198 Use next block for treasury tax and reward update
updateTaxPolicy and updateRewardPolicy are updating new tax-rate and reward-weight with current ctx. The ctx height is the last block of current epoch, but treasury should update next epoch's tax-rate and reward-weight at the last block of current epoch. In updateTaxPolicy and updateRewardPolicy, change ctx input of keeper setter to ctx with next epoch height.
#193 Recover old hd path
Added --old-hd-path
option to $terracli keys add
command for recovering old bip44 path(for atom)
$ terracli keys add tmp --recover --old-hd-path
Enter a passphrase to encrypt your key to disk:
Repeat the passphrase:
> Enter your bip39 mnemonic
candy hint hamster cute inquiry bright industry decide assist wedding carpet fiber arm menu machine lottery type alert fan march argue adapt recycle stomach
NAME: TYPE: ADDRESS: PUBKEY:
tmp local terra1gaczd45crhwfa4x05k9747cuxwfmnduvmtyefs terrapub1addwnpepqv6tse2pyag9ts5vy6dk4h3qh7xc9qhat4jx449n6nrfve3jhzldz3f3l7p
- #187: Change all time instance timezone to UTC to remove gap in time calculation
#187 Bugfix/fix-time-zone
In update_230000.go, we change genesis time derivation from
genesisTime := time.Unix(genesisUnixTime, 0)
to
genesisTime := time.Unix(genesisUnixTime, 0).UTC()
- #185: Improve oracle specs
- #184: Fix
terracli
docs - #183: Change all GradedVestingAccounts to LazyGradedVestingAccounts.
- #179: Conform querier responses to be returned in JSON format
- #178: Change BIP44 PATH to 330
#185 Oracle MsgFeederDelegatePermission
specs
Added docs for using MsgFeederDelegatePermission
to oracle specs
#185 Oracle price vote denom error fix
Oracle specs now specify micro units uluna
and uusd
for correct denominations for price prevotes and votes
#184 Minor terracli fix
#183 Oracle param update
OracleRewardBand: 1% => 2%
#183 Market param update
DailyLunaDeltaCap: 0.5% => 0.1%
#183 LazyGradedVestingAccount
- Spread out the cliffs for presale investors, with varying degrees of severity (details #180)
#179 Align Querier responses to JSON
- Querier was returning misaligned formats for return values, now aligned to JSON format
#178 Correctly use 330 as the coin type field in BIP 44 PATH
- We were previously using the Cosmos coin type field for the BIP44 path. Changed to Terra's own 330.
- #166: Newly added parameters were not being added to the columbus-2 genesis.json file. Fixed.
-
#140 Fix export bug.
-
#140 Client querier bug fix (distr outstanding rewards)
-
#140 Fix budget module to delete all votes when submitter withdraws the program and to use DeleteVotesForProgram to delete all votes for a program.
#140 Msg Types
cosmos-sdk/MsgSend => pay/MsgSend
cosmos-sdk/MsgMultiSend => pay/MsgMultiSend
cosmos-sdk/MsgCreateValidator => staking/MsgCreateValidator
cosmos-sdk/MsgEditValidator => staking/MsgEditValidator
cosmos-sdk/MsgDelegate => staking/MsgDelegate
cosmos-sdk/MsgUndelegate => staking/MsgUndelegate
cosmos-sdk/MsgBeginRedelegate => staking/MsgBeginRedelegate
cosmos-sdk/MsgWithdrawDelegationReward => distribution/MsgWithdrawDelegationReward
cosmos-sdk/MsgWithdrawValidatorCommission => distribution/MsgWithdrawValidatorCommission
cosmos-sdk/MsgModifyWithdrawAddress => distribution/MsgModifyWithdrawAddress
cosmos-sdk/MsgUnjail => slashing/MsgUnjail
#140 Oracle updates prevoting/voting
MsgPriceFeed is split into MsgPricePrevote
and MsgPriceVote
Period | P1 | P2 | P3 | ... |
Prevote | O | O | O | ... |
|-----\-----\-----\----- |
Vote | | O | O | ... |
In prevote stage, a validator should submit the hash of the part of real vote msg to prove the validator is not just copying other validators price vote. In vote phrase, the validator should reveal the real price by submitting MsgPriceVote with salt
.
The submission order has to be kept in (vote -> prevote) order. If an prevote comes early, it will replace previous prevote so next vote, which reveals the proof for previous prevote, will be failed.
#148 Oracle voting right delegation
By using the oracle/MsgDelegateFeederPermission a validator can assign the right to vote to another account at any time. The validator account will preserve its right to vote at any time.
"/distribution/parameters" => "/distribution/params"
"/staking/parameters" => "/staking/params"
Send request body
From:
type SendReq struct {
BaseReq rest.BaseReq `json:"base_req"`
Amount sdk.Coins `json:"coins"`
}
To:
type SendReq struct {
BaseReq rest.BaseReq `json:"base_req"`
Coins sdk.Coins `json:"coins"`
}
(GET/POST) "/oracle/denoms/{%s}/votes"
(GET/POST) "/oracle/denoms/{%s}/prevotes"
(GET/POST) "/oracle/voters/{%s}/feeder"
(GET/POST) "/market/swap"
(GET/POST) "/market/params"
#140 Add transaction logs for tax and swap amount
Add tax log to send transaction for recording real amount which a transaction pay. Ex) txs/B515331BF9EA9A92AD59A85D593E5A2B170E3D297C59E85DDA9FA6FF33790E9B
{
"logs": [
{
"msg_index": 0,
"success": true,
"log": "{\"tax\":\"400uluna\"}"
}
]
}
Add swap_coin log to swap transaction for recording the amount of swapped coin along with offered coin
{
"logs": [
{
"msg_index": 0,
"success": true,
"log": "{\"swap_coin\":\"400ukrw\"}"
}
]
}
#150 Market Swap protections
A daily trading cap (luna supply change cap) protects excessive luna volatility. Capping Luna deflation prevents divesting attacks (attacker swaps large amount into terra to avoid slippage) and consensus attacks by limiting access to staking tokens. Early parameters are 2% - 10% on both sides of the trade.
To protect against short term price deviations between the open market and the on-chain oracle, we now charge a 2-10% spread on swaps that involve luna.
Swap spreads are distributed to oracle ballot winners on the oracle VotePeriod; this vastly shortens distribution periods. Also, all stakeholders receive oracle rewards (includes delegators).
Previously we facilitated swaps for 10 VotePeriods after the last valid oracle ballot. We now stop swaps immediately to prevent arbitrage attacks from price drift.