There are three IBC related softwares, ibc_contracts, ibc_plugin_eos and ibc_plugin_bos, There are currently multiple major versions for all these three software repositories and between major versions maybe incompatible, so the three repositories need to use the correct major version number to coordinate their work.
compatible combination one:
Repo | branch(es) |
---|---|
ibc_contracts | master |
ibc_plugin_eos | master(for eosio v1.8.x)/ibc_v2.x.x_branch(for eosio 1.7.x and early version) |
ibc_plugin_bos | master 2 |
compatible combination two:
Repo | branch(es) |
---|---|
ibc_contracts | v1.x.x |
ibc_plugin_eos | ibc_v1.x.x_branch |
ibc_plugin_bos | ibc_v1.x.x_branch |
chain_plug->chain().abort_block()
and chain_plug->chain().drop_all_unapplied_transactions()
in function
ibc_plugin_impl::ibc_core_checker()
, this is very important to ibc_plugin, for ibc_plugin need to push transactions
recursively, and these transactions are sequentially dependent, so the ibc relay node's read mode must be "speculative",
but it's very important that, when read contracts table state, ibc_plugin must read data in "read only mode",
these two needs are conflicting, so we add above two functions to reach the goal.
Because ibc_plugin is required for each chain and run as a relay node, and because the underlying source code of BOS and EOS is slightly different, a separate plugin repository needs to be maintained for each chain, the plugin repository for eosio is ibc_plugin_eos, for bos is ibc_plugin_bos. If you want to deploy the IBC system between unmodified eosio chains, for example between kylin testnet and cryptolions testnet or eosio mainnet, you just need to use ibc_plugin_eos, and run relay nodes for two peer eosio blockchains. The difference between ibc_plugin_eos and ibc_plugin_bos is simply that, ibc_plugin_eos is based on eosio, ibc_plugin_bos is based on bos, the ibc_plugin source code of the two repository and the modifications to other plugins(chain_plugin) are exactly the same. Doing so makes it easier to maintain the source code.