-
Notifications
You must be signed in to change notification settings - Fork 234
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unification of RPC labels, commands, descriptions #14
Comments
I'm inclined to tag this with a "metadex" label, because the results of |
To be honest mate I'm not sure I agree here. These are API's we're talking about not end user interfaces and I think it's restrictive to insist that developers of the various different Omni projects must adhere to a specific ruleset for things like command names and parameter structures. This is just my view of course, but I don't really think forcing say OmniJ to adhere to the same structure as OmniCore's RPC layer is necessary, and if anything I think it would hurt - having to do things a specific way can stifle innovation (again just imo).
That I 100% agree with because we're then talking terminology/nomenclature - but I raised this many many moons ago and got unanimous agreement the terms were "property" not "currency" and "tokens" not "coins". I made a fairly aimple argument:
Yeah it's not that I don't see your point (I do) and project developers where possible should make things easy - but again I think it's just that notion of telling people how they must do things that I'm anti - for example just the same as it would be inappropriate for Bitcoin Core devs to try and tell Coinbase that they should only be using the specific command "sendtoaddress" in their API so it's the same - respectively I think the same for us. TL:DR; I'm not against us providing some sort of guideline, but I am against us trying to push this on others and I would vote against insisting that other projects adapt the same API structure as OmniCore because I think we would handcuff contributors unnecessarily. Just my 2 cents of course bud :) |
Could you clarify mate, example perhaps? |
I started the issue with an idealistic vision (e.g. normalizing across projects), but to narrow down the scope and to address ...
... I created a list of labels earlier, which is probably not 100 % up to date, but likely close to: mastercoin-MSC#163 (comment) In the context of the exchange(s), the following labels are for example very related, but inconsistent:
It mostly comes down to:
|
I hope I didn't come across as knocking that :) my view is merely about telling people what to do, if say for example Sean wanted to do OmniJ with a parameter set and output similar to OmniCore's RPC interface I can see the benefit in that - the only thing I was trying to say is that should be up to those respective developers to take the direction that suits their project best so we should try to avoid having things that are supposed to encompass all Omni projects :)
Ugh, I had not noticed that. I'm going to guess the underscores come in the MetaDEx RPC somewhere? I guess this is an outcome of collaborative development - I think I did all RPC calls except MetaDEx and so they likely follow "my" way which is all lowercase, property not currency, token not coin, no underscores etc. I think Faiz did the MetaDEx RPC calls and so probably applied his own take on field names etc. Standardizing in our own client is absolutely the right thing to do.
My vote would be:
EDIT: sorry just to clarify, |
Haha, this sounds mean. ;) I never intended to dictate how it should be, but rather wanted point out there are several naming conventions in the wild (and within Omni Core), which would benefit from unification in the long run.
The list I posted in the last comment might also include some labels from the traditional DEx, but I think this is the case. Back then I extracted the output of I have no preference regarding underscores or no underscores, and I agree that |
Sorry, poor wording on my part - I know you're not trying to dictate :) Simply put if we want to standardize something it should go in the spec, else it should be up to the respective projects to do as they see fit. I completely agree different naming conventions in OmniCore should be fixed.
I sort of agree - fields in calls that already exist should not be changed, but fields in new API calls I think can be changed prior to release - no-one should be integrating the 0.0.10 branch in production and integrators running it as test integrations have to be open to changes - at least until we hit a sort of 'release candidate' stage so we have the freedom to make new features as best as they possibly can be :) |
I tagged this with "meta dex" due to the required changes of the API to finalize the meta DEx integration, and I'd consider it as resolved, once the meta DEx related changes are in (and further unification might be tackled and tracked later in a seperate, more specific issue). |
@zathras-crypto:
This is because |
Yeah I noticed that too mate. However |
I'll push the updated logic in a few minutes. After thinking about this a bit:
All three should be included in the RPC results imho.
|
Yeah they are currently - from
I'm still in split minds about
Let me take a look at this mate - long story short the 'methodology' for RPC has always been to reparse the original packet simply because we don't store the specifics of a transaction once it's parsed (we only store the outcome) and thus have no way of knowing what was in the original packet without reparsing.
The issue here is kind of as above - once the order is filled it's no longer in the order book, and the trade database contains metrics on the outcome of completed trades not the specifics of the originally listed trades (and these can be different). To cut a long story short; we only store the outcome of transactions, not transactions themselves (storing transactions themselves is left to the blockchain data). To be honest, I've always had something in the back of my mind and that is completely changing the way we do transaction retrieval. This would mean storing the specifics of decoded packets in say another db avoiding the need to reparse on the RPC and UI layers to retrieve transaction information. This was all kind of tied in to making parsing more 'atomic' (ie parsing and processing become two seperate stages - a prerequisite for handling unconfirmed txs). |
Well, then let's cover all cases and return the original amounts as well as the "amounts to fill" (i.e. remaining amount up for sale and amount still desired, based on that leftover)..
+1 |
Quick heads up: I started to wrap parsing and checks into functions. There is a good chance, this is totally over the top, but this is basically where it's going: Value sendchangeissuer_OMNI(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 3)
throw runtime_error(
"sendchangeissuer_OMNI \"fromaddress\" \"toaddress\" propertyid\n"
"......"
);
// obtain parameters & info
std::string fromAddress = ParseAddress(params[0]);
std::string toAddress = ParseAddress(params[1]);
uint32_t propertyId = ParsePropertyId(params[2]);
RequireExistingProperty(propertyId);
RequireManagedProperty(propertyId);
RequireTokenIssuer(fromAddress, propertyId);
// create a payload for the transaction
std::vector<unsigned char> payload = CreatePayload_ChangeIssuer(propertyId);
// request the wallet build the transaction (and if needed commit it)
return CreateOrSend(fromAddress, toAddress, payload);
} If something isn't valid, or the requirements are not met, then JSON exceptions are thrown. |
Sorry missed that comment - should we add a field to the metadex class rather than doing calculations at presentation layers (RPC/UI etc)? Eg we currently have:
So perhaps we add one more?
Note |
Yeah, sounds like a good idea. I'm also not sure about |
This seems like a nice code-flow simplification that should make the code more accessible/readable (good thing) :) |
We currently have two "styles" when it comes to the help messages:
I have no preference regarding the style, as long as:
When it comes to types, we should probably take a look at the JSON standard, which mentiones |
Good point - I prefer (preference only):
|
Sounds good. One more point. Let's say that default values should also be given, maybe in this format:
|
Ah, and another one: Usually, examples are given. Do we want to use examples with actual values, or placeholders? HelpExampleCli("getallbalancesforid_MP", "1") vs. HelpExampleCli("getallbalancesforid_MP", "propertyid") |
+1, any optional param with a default should be noted - happy with the format
That's a really interesting question actually - I tend to think that placeholders are more descriptive, but values convey a clearer example... I'd probably go example values personally (and that seems to be what bitcoin-core does also) |
I tend to prefer actual values, too. Regarding the original topic: The traditional DEx currently has: "subaction" : "New",
"subaction" : "Update",
"subaction" : "Cancel", ... while MetaDEx uses: "action" : "new sell",
"action" : "cancel price",
"action" : "cancel pair",
"action" : "cancel all", I think we should use Edit: and Edit: ideally, we find a shorter label, or an alternative, for the following two (MetaDEx): "propertyidforsale" : 1,
"propertyidforsaleisdivisible" : true, // <-- long + not id, but property is divisible
"amountforsale" : "0.55000000",
"amountremaining" : "0.00000000",
"propertyiddesired" : 6,
"propertyiddesiredisdivisible" : false, // <-- long + not id, but property is divisible |
Great minds mate :) From my RPC branch:
and
Happy to change |
Yes, I think this would be great. |
Nice and easy :) zathras-crypto@803e488 |
Almost resolved. There are a few left in |
fac04cb refactor: Add lock annotations to Active* methods (MacroFake) fac15ff Fix logical race in rest_getutxos (MacroFake) fa97a52 Fix UB/data-race in RPCNotifyBlockChange (MacroFake) fa530bc Add ChainstateManager::GetMutex(), an alias for ::cs_main (MacroFake) Pull request description: This fixes two issues: * A data race in `ActiveChain`, which returns a reference to the chain (a `std::vector`), which is not thread safe. See also below traceback. * A corrupt rest response, which returns a blockheight and blockhash, which are unrelated to each other and to the result, as the chain might advance between each call without cs_main held. The issues are fixed by taking cs_main and holding it for the required time. ``` ================== WARNING: ThreadSanitizer: data race (pid=32335) Write of size 8 at 0x7b3c000008f0 by thread T22 (mutexes: write M131626, write M151, write M131553): #0 std::__1::enable_if<(is_move_constructible<CBlockIndex**>::value) && (is_move_assignable<CBlockIndex**>::value), void>::type std::__1::swap<CBlockIndex**>(CBlockIndex**&, CBlockIndex**&) /usr/lib/llvm-13/bin/../include/c++/v1/__utility/swap.h:39:7 (bitcoind+0x501239) OmniLayer#1 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::__swap_out_circular_buffer(std::__1::__split_buffer<CBlockIndex*, std::__1::allocator<CBlockIndex*>&>&) /usr/lib/llvm-13/bin/../include/c++/v1/vector:977:5 (bitcoind+0x501239) OmniLayer#2 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::__append(unsigned long) /usr/lib/llvm-13/bin/../include/c++/v1/vector:1117:9 (bitcoind+0x501239) OmniLayer#3 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::resize(unsigned long) /usr/lib/llvm-13/bin/../include/c++/v1/vector:2046:15 (bitcoind+0x4ffe29) OmniLayer#4 CChain::SetTip(CBlockIndex*) src/chain.cpp:19:12 (bitcoind+0x4ffe29) OmniLayer#5 CChainState::ConnectTip(BlockValidationState&, CBlockIndex*, std::__1::shared_ptr<CBlock const> const&, ConnectTrace&, DisconnectedBlockTransactions&) src/validation.cpp:2748:13 (bitcoind+0x475d00) OmniLayer#6 CChainState::ActivateBestChainStep(BlockValidationState&, CBlockIndex*, std::__1::shared_ptr<CBlock const> const&, bool&, ConnectTrace&) src/validation.cpp:2884:18 (bitcoind+0x47739e) OmniLayer#7 CChainState::ActivateBestChain(BlockValidationState&, std::__1::shared_ptr<CBlock const>) src/validation.cpp:3011:22 (bitcoind+0x477baf) OmniLayer#8 node::ThreadImport(ChainstateManager&, std::__1::vector<fs::path, std::__1::allocator<fs::path> >, ArgsManager const&) src/node/blockstorage.cpp:883:30 (bitcoind+0x23cd74) OmniLayer#9 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7::operator()() const src/init.cpp:1657:9 (bitcoind+0x15863e) OmniLayer#10 decltype(static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(fp)()) std::__1::__invoke<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x15863e) OmniLayer#11 void std::__1::__invoke_void_return_wrapper<void, true>::__call<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:61:9 (bitcoind+0x15863e) OmniLayer#12 std::__1::__function::__alloc_func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x15863e) OmniLayer#13 std::__1::__function::__func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x15863e) OmniLayer#14 std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x88891f) OmniLayer#15 std::__1::function<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x88891f) OmniLayer#16 util::TraceThread(char const*, std::__1::function<void ()>) src/util/thread.cpp:18:9 (bitcoind+0x88891f) OmniLayer#17 decltype(static_cast<void (*>(fp)(static_cast<char const*>(fp0), static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(fp0))) std::__1::__invoke<void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(void (*&&)(char const*, std::__1::function<void ()>), char const*&&, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x157e6a) OmniLayer#18 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, 2ul, 3ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>&, std::__1::__tuple_indices<2ul, 3ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x157e6a) OmniLayer#19 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x157e6a) Previous read of size 8 at 0x7b3c000008f0 by main thread: #0 std::__1::vector<CBlockIndex*, std::__1::allocator<CBlockIndex*> >::size() const /usr/lib/llvm-13/bin/../include/c++/v1/vector:680:61 (bitcoind+0x15179d) OmniLayer#1 CChain::Tip() const src/./chain.h:449:23 (bitcoind+0x15179d) OmniLayer#2 ChainstateManager::ActiveTip() const src/./validation.h:927:59 (bitcoind+0x15179d) OmniLayer#3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1841:35 (bitcoind+0x15179d) OmniLayer#4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2) OmniLayer#5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2) Location is heap block of size 232 at 0x7b3c00000870 allocated by main thread: #0 operator new(unsigned long) <null> (bitcoind+0x132668) OmniLayer#1 ChainstateManager::InitializeChainstate(CTxMemPool*, std::__1::optional<uint256> const&) src/validation.cpp:4851:21 (bitcoind+0x48e26b) OmniLayer#2 node::LoadChainstate(bool, ChainstateManager&, CTxMemPool*, bool, Consensus::Params const&, bool, long, long, long, bool, bool, std::__1::function<bool ()>, std::__1::function<void ()>) src/node/chainstate.cpp:31:14 (bitcoind+0x24de07) OmniLayer#3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1438:32 (bitcoind+0x14e994) OmniLayer#4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2) OmniLayer#5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2) Mutex M131626 (0x7b3c00000898) created at: #0 pthread_mutex_lock <null> (bitcoind+0xda898) OmniLayer#1 std::__1::mutex::lock() <null> (libc++.so.1+0x49f35) OmniLayer#2 node::ThreadImport(ChainstateManager&, std::__1::vector<fs::path, std::__1::allocator<fs::path> >, ArgsManager const&) src/node/blockstorage.cpp:883:30 (bitcoind+0x23cd74) OmniLayer#3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7::operator()() const src/init.cpp:1657:9 (bitcoind+0x15863e) OmniLayer#4 decltype(static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(fp)()) std::__1::__invoke<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x15863e) OmniLayer#5 void std::__1::__invoke_void_return_wrapper<void, true>::__call<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&>(AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&) /usr/lib/llvm-13/bin/../include/c++/v1/__functional/invoke.h:61:9 (bitcoind+0x15863e) OmniLayer#6 std::__1::__function::__alloc_func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:171:16 (bitcoind+0x15863e) OmniLayer#7 std::__1::__function::__func<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, std::__1::allocator<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>, void ()>::operator()() /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:345:12 (bitcoind+0x15863e) OmniLayer#8 std::__1::__function::__value_func<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:498:16 (bitcoind+0x88891f) OmniLayer#9 std::__1::function<void ()>::operator()() const /usr/lib/llvm-13/bin/../include/c++/v1/__functional/function.h:1175:12 (bitcoind+0x88891f) OmniLayer#10 util::TraceThread(char const*, std::__1::function<void ()>) src/util/thread.cpp:18:9 (bitcoind+0x88891f) OmniLayer#11 decltype(static_cast<void (*>(fp)(static_cast<char const*>(fp0), static_cast<AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(fp0))) std::__1::__invoke<void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>(void (*&&)(char const*, std::__1::function<void ()>), char const*&&, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/type_traits:3918:1 (bitcoind+0x157e6a) OmniLayer#12 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, 2ul, 3ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7>&, std::__1::__tuple_indices<2ul, 3ul>) /usr/lib/llvm-13/bin/../include/c++/v1/thread:280:5 (bitcoind+0x157e6a) OmniLayer#13 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(char const*, std::__1::function<void ()>), char const*, AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7> >(void*) /usr/lib/llvm-13/bin/../include/c++/v1/thread:291:5 (bitcoind+0x157e6a) Mutex M151 (0x55aacb8ea030) created at: #0 pthread_mutex_init <null> (bitcoind+0xbed2f) OmniLayer#1 std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x49fb3) OmniLayer#2 __libc_start_main <null> (libc.so.6+0x29eba) Mutex M131553 (0x7b4c000042e0) created at: #0 pthread_mutex_init <null> (bitcoind+0xbed2f) OmniLayer#1 std::__1::recursive_mutex::recursive_mutex() <null> (libc++.so.1+0x49fb3) OmniLayer#2 std::__1::__unique_if<CTxMemPool>::__unique_single std::__1::make_unique<CTxMemPool, CBlockPolicyEstimator*, int const&>(CBlockPolicyEstimator*&&, int const&) /usr/lib/llvm-13/bin/../include/c++/v1/__memory/unique_ptr.h:728:32 (bitcoind+0x15c81d) OmniLayer#3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1426:24 (bitcoind+0x14e7b4) OmniLayer#4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2) OmniLayer#5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2) Thread T22 'b-loadblk' (tid=32370, running) created by main thread at: #0 pthread_create <null> (bitcoind+0xbd5bd) OmniLayer#1 std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/lib/llvm-13/bin/../include/c++/v1/__threading_support:443:10 (bitcoind+0x155e06) OmniLayer#2 std::__1::thread::thread<void (*)(char const*, std::__1::function<void ()>), char const (&) [8], AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7, void>(void (*&&)(char const*, std::__1::function<void ()>), char const (&) [8], AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*)::$_7&&) /usr/lib/llvm-13/bin/../include/c++/v1/thread:307:16 (bitcoind+0x155e06) OmniLayer#3 AppInitMain(node::NodeContext&, interfaces::BlockAndHeaderTipInfo*) src/init.cpp:1656:29 (bitcoind+0x150164) OmniLayer#4 AppInit(node::NodeContext&, int, char**) src/bitcoind.cpp:231:43 (bitcoind+0x133fd2) OmniLayer#5 main src/bitcoind.cpp:275:13 (bitcoind+0x133fd2) SUMMARY: ThreadSanitizer: data race /usr/lib/llvm-13/bin/../include/c++/v1/__utility/swap.h:39:7 in std::__1::enable_if<(is_move_constructible<CBlockIndex**>::value) && (is_move_assignable<CBlockIndex**>::value), void>::type std::__1::swap<CBlockIndex**>(CBlockIndex**&, CBlockIndex**&) ================== ``` From https://cirrus-ci.com/task/5612886578954240?logs=ci#L4868 ACKs for top commit: achow101: re-ACK fac04cb theStack: Code-review ACK fac04cb Tree-SHA512: 9d619f99ff6373874c7ffe1db20674575605646b4b54b692fb54515a4a49f110a770026d7320ed6dfeaa7976be4cd89e93f821acdbf22c7662bd1c5be0cedcd2
As continuation of #3 (comment):
Well, this is the documentation, but I was more thinking about something more compact, and with the intention of finding a naming convention for various places, such as Omni Core, Omni Wallet, OmniJ, ...
Where I was basically going: there are several labels and commands, documentation pieces and more, all referring to the same thing:
"Create a Property via Crowdsale with Variable number of Tokens"
"sendissuancecrowdsale_OMNI"
"Create Property - Variable"
"Create Property"
"Create Property - Variable"
"Create Property - Crowdsale Issuance"
"createCrowdsaleHex"
(let's ignore the "Hex" here)"create crowdsale"
"create a property via crowdsale with variable supply"
Now this is more or less pretty similar, but when it comes to.. say for example DEx related stuff, there are
"trade tokens for bitcoins"
,"sell bitcoins for mastercoins"
,"create an offer"
, and other variations.It would be nice to have a spreadsheet with:
In particular, having consistent commands seems useful, for a consistent use of several Omni products. It's not relevant, whether it's
"simplesend"
or"simple_send"
, but more of an issue, if one uses"send"
, but the other"transfer_tokens"
, especially when it comes to APIs. Hope you see my point? :)More obvious cases:
"property"
or"currency"
?"tokens"
or"coins"
, ...?If I find some time, I'm going to create a list for Omni Core, which could then be passed around to collaboratively improve the names and labels.
I mentioned, I dislike
"send_MP"
and"send_OMNI"
, but I also have no idea how to make it better - or what others think about this topic in general - so this can basically be considered as trying to find an answer and alternatives.. :)At some point this can be extended to parameter names, and it would also be useful, if there were a compact list of the fields of RPC results (e.g. of
"gettransaction_MP"
).The text was updated successfully, but these errors were encountered: