IadixDev
Full Member
Offline
Activity: 322
Merit: 151
They're tactical
|
|
March 03, 2017, 08:53:27 AM Last edit: March 03, 2017, 01:13:43 PM by IadixDev |
|
Very interesting project Thanks though everything here sounds pretty much abstract, and in general it looks like the project lacks focus - meaning it needs to define some specific direction (maybe several ones) and most importantly concrete goals set with their respective timeframes.
I am a bit lost reading about all those capabilities... trying to understand what specific targets this powerfull framework will have. Will play more with website to see if it clears up things.
The framework was not designed specially for blockchain originally, so it's focus is very wide, from hardware drivers ( usb, hid,audio, vesa), asynchronous events, management of different types of network protocol, object references, but it has very pragmatic application, and all the code already works, but it's made to be a modular framework, rather than monolithic application, so necessarily it's a bit abstract The goal of the framework is to build a solid, interoperable, light weight abstraction layer to build application on, and I have different practical cases in mind. In a way i kept this project out of the commercial pipeline to have the time to advance on the code at baby step looking the best way to implement each thing with network protocol json/rpc , threading and asynchronous io in mind, and to avoid to have to rush the development of certain thing to release specific application with a well defined dead line, but lots of it is already ready and tested now For the blockchain specific things, there is already large part of what is needed to make a client for any blockchain based on bitcore , using any hash algo that is compiled in or in a module, with staking with pos 1/2/3 and is interoperable with bitcore based wallet, with compatible rpc interface. There is not much documentation online, only short explanation on the rough idea, but I will write more detailed documentation latter. I have just a small question... You tell you will provide universal binaries to be used on practically any system and architecture. I wonder which format those binaries will be based on? It cannot be just assembler/machine code, as this cannot be used both on x86 and ARM, and even I doubt the same format could be used on x86 machines running Windows and Linux respectively. Will that be .dll, .so, or something proprietary?
I say only on different system, the binaries are position independant dynamically linked modules, which contain machine code, they can be run only on same cpu architecture, but they dont depend on the compiler runtime or the host system, all the module are in simple C , it should not be hard to compile for different cpu architectures, including arm, I have plan for the raspberry pi , but it will need a version of the binaries for each cpu architectures, for the moment it's 32bits x86, with sse for the raytracing, it can run on any system running on x86 /x64 with x86 emulation, other binaries need to be made for arm, or for native 64 bits intel. However I would like to have some test with udp implementation of certain parts of the protocol enough to make useable client, before to get into arm. The same binaries can already be compiled on windows with visual studio and used on linux, or compiled on linux with gcc and used on windows, it already works and is testable from the git. I already tested this with micro kernel architecture so can safety say the dependencies are "in check". Most of the binaries running on the ubuntu 64 server currently have been compiled with visual studio 2013 on windows, including the raytracing with the sse code with sse C intrinsic. It is home made ABI, there is zero documentation on the inner format, but the code source to create them out of 32 bit dll & so file is on the git ( https://github.com/iadix/purenode/tree/master/mod_maker ) , and the loader too ( https://github.com/iadix/purenode/blob/master/libcon/tpo_mod.c ). I should release a new version on the git in the next days, and the new block explorer, after i will improve the 3d demo page, and then ill see after in 2 weeks how everything goes with the ico préparation if there are more needs for the site and web things, then I will write more documentation on the memory model, references tree, json rpc, modules, and the blockchain specific modules & applications with more html5 examples, either for the website or for the node built in application like block explorer & secure wallet, and/or with the raytracing.
|
|
|
|
|
|
There are several different types of Bitcoin clients. The most secure are full nodes like Bitcoin Core, which will follow the rules of the network no matter what miners do. Even if every miner decided to create 1000 bitcoins per block, full nodes would stick to the rules and reject those blocks.
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
beyinsi
|
|
March 08, 2017, 10:13:52 AM |
|
ICO date?
|
|
|
|
IadixTeam (OP)
Newbie
Offline
Activity: 35
Merit: 0
|
|
March 08, 2017, 09:47:40 PM |
|
We're still working to improve Purenode and everything that can be done to make a better ico announcement. We'll communicate the new date quickly, thanks for your interest !
|
|
|
|
IadixDev
Full Member
Offline
Activity: 322
Merit: 151
They're tactical
|
|
March 19, 2017, 04:15:11 PM |
|
Hello Some news from the developpment i have put online the new block explorer : http://iadix.com/ico/blocks/enWhich include a filter system, the api looks like this : http://iadix.com/ico/api/blocks?height<86000&tx*>2&size>400https://github.com/iadix/purenode/blob/master/block_explorer/block_explorer.c#L212
tree_manager_set_child_value_i64(result, "height", height); tree_manager_set_child_value_i32(result, "size", size); tree_manager_set_child_value_hash(result, "hash", block_hash); tree_manager_set_child_value_i32(result, "confirmations", nblks-height); tree_manager_set_child_value_i32(result, "time", time); tree_manager_set_child_value_i32(result, "version", version); tree_manager_set_child_value_i32(result, "bits", bits); tree_manager_set_child_value_i32(result, "nonce", nonce);
for (qv = 0; req->query_vars[qv].value.len > 0; qv++) { if (!tree_node_keval_i64(result, &req->query_vars[qv])) { release_zone_ref(&block); return 0; } }
I also added a mechanism to buffer blocks that are potentially orphaned, and being able to put a node on testing to test a few blocks and rollback the current chain to the fork point if the other chain is longer. https://github.com/iadix/purenode/blob/master/purenode/main.c#L1182if (testing>0) { hash_t lh; int new_len,cur_len; if (!tree_manager_get_child_value_hash(node, NODE_HASH("last_header_hash"), lh)) node_get_hash_idx(testing-1, lh);
tree_manager_create_node ("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_hash (&log, "ph", prevHash); tree_manager_set_child_value_hash (&log, "lh", lh); log_message (" testing block '%ph%' -- '%lh%'", &log); release_zone_ref (&log);
if (memcmp_c(prevHash, lh, sizeof(hash_t))) { release_zone_ref(&header); return 0; }
new_len = node_add_block_header(node, &header); cur_len = get_last_block_height();
tree_manager_create_node("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_i32(&log, "new_len", new_len); tree_manager_set_child_value_i32(&log, "cur_len", cur_len); log_message("testing chain at height : %new_len% - %cur_len%", &log); release_zone_ref(&log);
if (new_len > cur_len) { mem_zone_ref last_blk = { PTR_NULL }; int n; uint64_t lost_reward; lost_reward = 0; n = cur_len; while ((n--) > testing) { char chash[65]; hash_t h; uint64_t reward;
if (!node_get_hash_idx(n, h))continue;
n = 0; while (n<32) { chash[n * 2 + 0] = hex_chars[h[n] >> 4]; chash[n * 2 + 1] = hex_chars[h[n] & 0x0F]; n++; } chash[64] = 0; if (is_pow_block(chash)) reward=get_blockreward(n); else get_stake_reward(n, &reward);
lost_reward += reward; } tree_manager_create_node("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_i32(&log, "testing", testing); log_message("truncate chain to height : %testing%", &log); release_zone_ref(&log);
if(node_truncate_chain(testing)) { if (tree_manager_find_child_node(&self_node, NODE_HASH("last pos block"), NODE_BITCORE_BLK_HDR, &last_blk)) { unsigned int pBits; if (compute_last_pos_diff(&last_blk, &pBits)) tree_manager_set_child_value_i32(&self_node, "current pos diff", pBits); else tree_manager_set_child_value_i32(&self_node, "current pos diff", 0x1FFFFFFF);
release_zone_ref(&last_blk); }
sub_moneysupply (lost_reward);
log_output ("switching to new chain \n"); tree_manager_set_child_value_i32(node, "testing_chain", 0); } } release_zone_ref(&header); return 0; }
if (!tree_manager_find_child_node(payload, NODE_HASH("txs"), NODE_BITCORE_TX_LIST, &tx_list)){ release_zone_ref(&header); return 1; } if (!tree_manager_find_child_node(payload, NODE_HASH("signature"), NODE_BITCORE_ECDSA_SIG, &sig)){ release_zone_ref(&tx_list); release_zone_ref(&header); return 1; } tree_manager_get_node_istr(&sig, 0, &signature, 0); release_zone_ref(&sig); ret = node_is_next_block (&header, &lastBlk); if (!ret) { ret = check_node_chain(node, &header, &keep_block); if (!ret) { free_string(&signature); release_zone_ref(&header); release_zone_ref(&tx_list); return (keep_block==1)?0:1; } }
And also 2 command line parameters to rebuild local index and re validate local block chain, or looking for corrupt data. To recheck the block headers and tx indexes. To recheck block reward and proof of stake/proof of work to rebuild the money supply. Additionally i started to write some more in depth documentation about the memory model, and the binary module system : http://iadix.com/articles/viewarticle/en/purenode%20memory%20and%20component%20programming%20model_0/blogs/purenodeI'll probably update it to add more example and better page formatting Still no date from the ICO, nothing is really heavily tested for the moment, don't hesitate to mentions bugs or errors or comments Normally i just have to finish the page with the 3D demo, and we can start to get more precise with the ICO details, with the escrowed coins and the official detail, and the bounty campain. Thanks for your patience
|
|
|
|
Xenophanes0
Jr. Member
Offline
Activity: 50
Merit: 10
|
|
March 22, 2017, 08:59:14 AM |
|
i don't care if this is a trash coin, i just waiting the bounty twitter
salute your choice good idea for becoming a good businessman and for going further.
|
|
|
|
MEMEX
|
|
March 23, 2017, 04:27:08 PM |
|
Waiting Iadix ICO started dev
|
|
|
|
chinadaye
Member
Offline
Activity: 85
Merit: 10
|
|
March 26, 2017, 07:03:13 AM |
|
Any updates?
|
|
|
|
miramare
|
|
March 26, 2017, 07:22:36 AM |
|
Hello Some news from the developpment i have put online the new block explorer : http://iadix.com/ico/blocks/enWhich include a filter system, the api looks like this : http://iadix.com/ico/api/blocks?height<86000&tx*>2&size>400https://github.com/iadix/purenode/blob/master/block_explorer/block_explorer.c#L212
tree_manager_set_child_value_i64(result, "height", height); tree_manager_set_child_value_i32(result, "size", size); tree_manager_set_child_value_hash(result, "hash", block_hash); tree_manager_set_child_value_i32(result, "confirmations", nblks-height); tree_manager_set_child_value_i32(result, "time", time); tree_manager_set_child_value_i32(result, "version", version); tree_manager_set_child_value_i32(result, "bits", bits); tree_manager_set_child_value_i32(result, "nonce", nonce);
for (qv = 0; req->query_vars[qv].value.len > 0; qv++) { if (!tree_node_keval_i64(result, &req->query_vars[qv])) { release_zone_ref(&block); return 0; } }
I also added a mechanism to buffer blocks that are potentially orphaned, and being able to put a node on testing to test a few blocks and rollback the current chain to the fork point if the other chain is longer. https://github.com/iadix/purenode/blob/master/purenode/main.c#L1182if (testing>0) { hash_t lh; int new_len,cur_len; if (!tree_manager_get_child_value_hash(node, NODE_HASH("last_header_hash"), lh)) node_get_hash_idx(testing-1, lh);
tree_manager_create_node ("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_hash (&log, "ph", prevHash); tree_manager_set_child_value_hash (&log, "lh", lh); log_message (" testing block '%ph%' -- '%lh%'", &log); release_zone_ref (&log);
if (memcmp_c(prevHash, lh, sizeof(hash_t))) { release_zone_ref(&header); return 0; }
new_len = node_add_block_header(node, &header); cur_len = get_last_block_height();
tree_manager_create_node("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_i32(&log, "new_len", new_len); tree_manager_set_child_value_i32(&log, "cur_len", cur_len); log_message("testing chain at height : %new_len% - %cur_len%", &log); release_zone_ref(&log);
if (new_len > cur_len) { mem_zone_ref last_blk = { PTR_NULL }; int n; uint64_t lost_reward; lost_reward = 0; n = cur_len; while ((n--) > testing) { char chash[65]; hash_t h; uint64_t reward;
if (!node_get_hash_idx(n, h))continue;
n = 0; while (n<32) { chash[n * 2 + 0] = hex_chars[h[n] >> 4]; chash[n * 2 + 1] = hex_chars[h[n] & 0x0F]; n++; } chash[64] = 0; if (is_pow_block(chash)) reward=get_blockreward(n); else get_stake_reward(n, &reward);
lost_reward += reward; } tree_manager_create_node("log", NODE_LOG_PARAMS, &log); tree_manager_set_child_value_i32(&log, "testing", testing); log_message("truncate chain to height : %testing%", &log); release_zone_ref(&log);
if(node_truncate_chain(testing)) { if (tree_manager_find_child_node(&self_node, NODE_HASH("last pos block"), NODE_BITCORE_BLK_HDR, &last_blk)) { unsigned int pBits; if (compute_last_pos_diff(&last_blk, &pBits)) tree_manager_set_child_value_i32(&self_node, "current pos diff", pBits); else tree_manager_set_child_value_i32(&self_node, "current pos diff", 0x1FFFFFFF);
release_zone_ref(&last_blk); }
sub_moneysupply (lost_reward);
log_output ("switching to new chain \n"); tree_manager_set_child_value_i32(node, "testing_chain", 0); } } release_zone_ref(&header); return 0; }
if (!tree_manager_find_child_node(payload, NODE_HASH("txs"), NODE_BITCORE_TX_LIST, &tx_list)){ release_zone_ref(&header); return 1; } if (!tree_manager_find_child_node(payload, NODE_HASH("signature"), NODE_BITCORE_ECDSA_SIG, &sig)){ release_zone_ref(&tx_list); release_zone_ref(&header); return 1; } tree_manager_get_node_istr(&sig, 0, &signature, 0); release_zone_ref(&sig); ret = node_is_next_block (&header, &lastBlk); if (!ret) { ret = check_node_chain(node, &header, &keep_block); if (!ret) { free_string(&signature); release_zone_ref(&header); release_zone_ref(&tx_list); return (keep_block==1)?0:1; } }
And also 2 command line parameters to rebuild local index and re validate local block chain, or looking for corrupt data. To recheck the block headers and tx indexes. To recheck block reward and proof of stake/proof of work to rebuild the money supply. Additionally i started to write some more in depth documentation about the memory model, and the binary module system : http://iadix.com/articles/viewarticle/en/purenode%20memory%20and%20component%20programming%20model_0/blogs/purenodeI'll probably update it to add more example and better page formatting Still no date from the ICO, nothing is really heavily tested for the moment, don't hesitate to mentions bugs or errors or comments Normally i just have to finish the page with the 3D demo, and we can start to get more precise with the ICO details, with the escrowed coins and the official detail, and the bounty campain. Thanks for your patience The dev's positive attitude may make a likely success in the future. Keep my eye on it. And look forward to the ico.
|
|
|
|
IadixTeam (OP)
Newbie
Offline
Activity: 35
Merit: 0
|
|
March 26, 2017, 05:38:34 PM |
|
Yes, our dev is working hard and has a real vision of what must be a good blockchain. We'll give you an ico date very soon, some few last things to prepare
|
|
|
|
IadixDev
Full Member
Offline
Activity: 322
Merit: 151
They're tactical
|
|
April 18, 2017, 08:47:22 PM Last edit: April 18, 2017, 09:17:50 PM by IadixDev |
|
Awaiting the ICO take place, i started to work on a script engine to make it even easier to create blockchain and define node parameters to connect to other blockchain
let NODE_GFX_OBJECT configuration = ` { "name":"purenode",
"seed_node" : { "host":"iadix.com", "port" : 16714 }, "magic":0xD9BEFECA, "version":60018, "sign_mod":"ecdsa", "pubKeyVersion":0x19, "staking": { "targetspacing":64, "targettimespan":960, "stake reward":150000000, "limit":0x1B00FFFF, (NODE_MODULE_DEF) "pos_kernel" : {"file":"modz/stake_pos3.tpo"} }, "mining": { "targetspacing":64, "targettimespan":960, "limit":0x1E0FFFFF, "reward":10000000000000, "last_pow_block":200, "paytxfee":10000 }, "genesis": { "version" :1, "time" :1466419085, "bits" :0x1e0fffff, "nonce" :579883, "InitialStakeModifier":0, "InitialStakeModifier2":0 } }`
let NODE_BITCORE_NODE SelfNode = ` { "user_agent" : "purenode", "paytxfee" : 0, (NODE_GFX_INT)"version" : 0, (NODE_BITCORE_BLK_HDR) "lastPOSBlk":null, (NODE_BITCORE_BLK_HDR) "lastPOWBlk":null, (NODE_BITCORE_ADDR)"p2p_addr" : { "services": 0, (NODE_NET_IPV)"addr" : "127.0.0.1", (NODE_GFX_SHORT)"port" : 16819 }, (NODE_BITCORE_WALLET_ADDR_LIST) "addr scan list" : null, (NODE_BITCORE_MSG_LIST) "send queue" : [], (NODE_BITCORE_MSG_LIST) "emitted_queue" : [], (NODE_BITCORE_TX_LIST) "tx mem pool" : null, (NODE_BITCORE_BLK_HDR_LIST) "submitted blocks" : null }`
let NODE_MODULE_DEF node_adx = `{"order":2, "file" : "modz/node_adx.tpo"}` let NODE_MODULE_DEF protocol_adx = `{"order":0, "file" : "modz/protocol_adx.tpo"}` let NODE_MODULE_DEF iadixcoin = `{"order":3, "file" : "modz/iadixcoin.tpo"}` let NODE_MODULE_DEF block_adx = `{"order":1, "file" : "modz/block_adx.tpo"}`
let NODE_BITCORE_NODE_LIST peer_nodes = `[]` let NODE_BITCORE_BLK_HDR genesis_blk = `{}` let NODE_GFX_INT ping_nonce = `1`
handler on_verack(node,payload) = ` node_adx.queue_ping_message(node) `
handler on_ping(node,payload) = ` node_adx.queue_pong_message(node,payload.nonce) `
handler on_pong(node, payload) = ` set node.synching = 1; `
handler on_version(node,payload) = `
set node.p2p_addr = payload.their_addr; set node.p2p_addr.services = payload.services;
set node.my_addr = payload.my_addr;
set node.user_agent = payload.user_agent; set node.version = payload.proto_ver; set node.block_height = payload.last_blk;
node_adx.node_log_version_infos(node)
node_adx.queue_verack_message(node)
`
handler on_inv(node, payload) = `
node_adx.queue_getdata_message(node, payload.hashes)
`
handler on_addr(node, payload) = `
foreach payload.addrs node_adx.node_log_addr_infos
`
proc init_node = `
protocol_adx.init_protocol (configuration) block_adx.init_blocks (configuration)
set SelfNode.version = configuration.version; node_adx.node_init_self (SelfNode) node_adx.node_load_block_indexes () loadmod (configuration.staking.pos_kernel) configuration.staking.pos_kernel.init_pos (configuration.staking)
block_adx.make_genesis_block (configuration.genesis, genesis_blk)
if (SelfNode.block_height = 1) node_adx.node_set_last_block (genesis_blk) configuration.staking.pos_kernel.store_blk_staking (genesis_blk) endif if (SelfNode.block_height > 1) node_adx.node_load_last_blks() configuration.staking.pos_kernel.load_last_pos_blk(SelfNode.lastPOSBlk) : set SelfNode.lastPOSBlk = SelfNode.last_blk; configuration.staking.pos_kernel.find_last_pos_block(SelfNode.lastPOSBlk) configuration.staking.pos_kernel.store_last_pos_hash(SelfNode.lastPOSBlk) configuration.staking.pos_kernel.compute_last_pos_diff(SelfNode.lastPOSBlk, SelfNode.current_pos_diff) : set SelfNode.current_pos_diff = SelfNode.limit; endor endor endif
sethandler SelfNode.emitted_queue{ "cmd=verack" } = on_verack; sethandler SelfNode.emitted_queue{ "cmd=version" } = on_version; sethandler SelfNode.emitted_queue{ "cmd=ping" } = on_ping; sethandler SelfNode.emitted_queue{ "cmd=pong" } = on_pong; sethandler SelfNode.emitted_queue{ "cmd=inv" } = on_inv; sethandler SelfNode.emitted_queue{ "cmd=addr" } = on_addr;
node_adx.new_peer_node(configuration.seed_node, peer_nodes) node_adx.queue_version_message(peer_nodes[0]) node_adx.queue_getaddr_message(peer_nodes[0])
`
For the moment it looks like this =) Then from C code : load_script ("script.cc", &script_vars); resolve_script_var (&script_vars,PTR_NULL, "init_node" , NODE_SCRIPT_PROC,&init_node_proc); execute_script_proc (&script_vars, &init_node_proc);
=> In the next days i'll get into implementing the harder function with the script to check block headers and tx, but all the basics to manipulate event handlers based on network message is already there, and i already have all the code in C. Like this the code for high level definition of node and protocol can be much cleaner =) Next also is making a system to define the module associated with http services with the script with a definition like this let NODE_GFX_OBJECT http_services = ` { "port":16820, "cgi" : [{"block explorer":{"index" : "/api/" , (NODE_MODULE_DEF) "block_explorer" : {"file":"modz/block_explorer.tpo"}}}] "rpc" : [{"walletRPC" :{"index" : "/wallet/", (NODE_MODULE_DEF) "rpc_wallet" : {"file":"modz/rpc_wallet.tpo"}}}],
}`
To have either cgi interface bound to http addresse like http://nodeip:port/api/method?param=value for the block explorer and the http/json/rpc api on http://nodeip:port/wallet/jsonrpcAnd next, to recode the block explorer and wallet modules with this script, to make it easier to read and easier to add new function in the api, without to even have to recompile anything. Those script can probably be easily compiled to assembler, and then to tpo module too, but for the moment it's simple interpreter I will write also more documentation for the API and how the script work in the next week. I guess tomorow or the day after the handler to deal with block validation should be ok. Then i'll see a bit more how to define the http interface binding to modules, and how to recode the modules with the script After this, i guess either the rest of the team is ready for the ICO, i'll probably launch a test coin because it's taking too much time
|
|
|
|
IadixTeam (OP)
Newbie
Offline
Activity: 35
Merit: 0
|
|
April 19, 2017, 07:34:43 PM |
|
Soon back, better and stronger with some cool stuff
|
|
|
|
IadixDev
Full Member
Offline
Activity: 322
Merit: 151
They're tactical
|
|
May 23, 2017, 09:32:26 AM Last edit: May 23, 2017, 10:59:07 AM by IadixDev |
|
Ok so i have some good news and some bad news lol The guy who was driving the ICO left the project, basically when i told him after month and month, once again, to make a timeline, and clarify his vision of the project beyond the ico funding rising, he told he left the project, i'm not sure i really understand his vision and motivation anyway, but we don't agree on too much things i guess and he left the project. Well on the other side it doesn't matter too much, to explain shortly the situation, those two guy never made a website of their life, basically they are not developers, it took me 4 month to make them do the most basic CSS with many sweating and hard pushing, they have no experience in developing anything, and i struggled for month to try to get them to work on real roadmap and timeline and objective only to get same deflective answer .. Basically this whole ICO thing was their plan, i was not super fond of the idea since the beginning, but they pushed me into it with their plan of ICO and investment and stuff, and then now he leave the project =) But well it's why i took a break to re orient myself, because the only reason i came to this forum to begin with is because he told me about this ICO stuff, that it's easy, just copy paste wave website and paste some technical word and a non sense white paper and get investement without engagment, responsability, timeline, roadmap, most of the vauge text on the website is wrote by them, well i knew there was very little chance for this to be realistic but could always try, the time i develop the thing i wanted to get at with distributed application, could always try to do an ICO thing, but it didn't work has he planed, and now he leave without explaining anything too much except we don't agree or something =) Well i will see what my plan is, it's why i took a bit a break to think things out, because now i'm alone on the project
But i still advanced more, reworked lot of the code, and cleaned the api to start working on the script engine, and it start to get good Much clearer code on the C side, and normally soon all the coin high level function should be made with the script. And i also added system to create dynamic html page from node variable with the script, like this it's total killer to make html5 dynamic app. with purenode.site file in the root web folder, and raw html template for page structure, node variables are added via the %% tag in the html_js opcode to generate the script for the page, and the script format the html and insert the value in the tags from these variable in the browser side. It use the purenode block.js api and keys.js api.
let NODE_JSON_ARRAY stylesheets = `[ "//fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=cyrillic,latin", "/assets/plugins/bootstrap/css/bootstrap.min.css", "/assets/css/style.css", "/assets/css/headers/header-default.css", "/assets/css/blocks.css", "/assets/css/footers/footer-v7.css", "/assets/plugins/animate.css", "/assets/plugins/line-icons/line-icons.css", "/assets/plugins/font-awesome/css/font-awesome.min.css", "/assets/plugins/brand-buttons/brand-buttons.css", "/assets/css/theme-skins/dark.css", "/assets/css/custom.css", "/assets/plugins/sky-forms-pro/skyforms/css/sky-forms.css", "/assets/plugins/sky-forms-pro/skyforms/custom/custom-sky-forms.css" ]`
let NODE_JSON_ARRAY scripts = `[ "/assets/plugins/jquery/jquery.min.js", "/assets/plugins/jquery/jquery-migrate.min.js", "/assets/plugins/bootstrap/js/bootstrap.min.js", "/assets/plugins/back-to-top.js", "/assets/plugins/smoothScroll.js", "/assets/plugins/sky-forms-pro/skyforms/js/jquery-ui.min.js", "/assets/plugins/sky-forms-pro/skyforms/js/jquery.validate.min.js", "/assets/plugins/sky-forms-pro/skyforms/js/jquery.maskedinput.min.js", "/assets/plugins/scrollbar/js/jquery.mCustomScrollbar.concat.min.js", "/assets/js/custom.js", "/assets/js/app.js" ]`
let NODE_JSON_ARRAY metas = `[ {"viewport":"width=device-width, initial-scale=1.0"}, {"description":""}, {"author":""} ]`
page blocks = `
push stylesheets,"/assets/css/plugins/blocks.css" push scripts,"/assets/js/plugins/datepicker.js" push scripts,"/assets/js/blocks.js" html_head "PURENODE BLOCK EXPLORER" html_block "templates/menu.html" html_block "templates/blocks.html" html_scripts
html_js jQuery(document).ready(function () { App.init(); App.initScrollBar(); Datepicker.initDatepicker(function (selectedDate) { blk_page_idx = 0; tx_page_idx = 0; txs = null; blocks = null; list_blocks(selectedDate, blk_page_idx, 0); list_txs(selectedDate, tx_page_idx); });
lang = 'en'; api_base_url = ''; site_base_url = '/purenode.site'; blk_page_idx = 0; tx_page_idx = 0; txs = null; blocks = null; selectedDate = $('#inline').datepicker({ dateFormat: 'yy-mm-dd' }).val();
list_blocks(selectedDate, blk_page_idx, 0); list_txs(selectedDate, tx_page_idx);
}); end_js html_block "templates/footer.html"
page address(addr,page_idx) = `
push stylesheets,"/assets/css/plugins/blocks.css" push scripts,"/assets/js/blocks.js" html_head "PURENODE BLOCK EXPLORER ( ADDRESS )" html_block "templates/menu.html" html_block "templates/address.html" html_scripts html_js $(document).ready(function () { App.init(); App.initScrollBar(); site_base_url = '/purenode.site'; api_base_url =''; currentAddr = '%addr%'; page_idx = parseInt('%page_idx%'); lang = 'en';
$('#imp_addr').val(currentAddr); list_addr_txs(currentAddr, page_idx); }); end_js
html_block "templates/footer.html"
`
page wallet = ` push stylesheets,"/assets/css/plugins/blocks.css" push scripts,"/assets/js/blocks.js" push scripts,"/assets/js/ecdsa_bundle.js" push scripts,"/assets/js/jsSHA-2.2.0/src/sha_dev.js" push scripts,"/assets/js/keys.js" push scripts,"/assets/js/md5.min.js"
html_head "PURENODE WALLET" html_block "templates/menu.html" html_block "templates/wallet.html" html_scripts html_js jQuery(document).ready(function() { App.init (); lang ='en'; api_base_url =''; site_base_url ='/purenode.site'; ec = new EC('secp256k1'); $('#addrlabel').val('new address'); get_accounts ('my_address_list_table');
}); end_js
html_block "templates/footer.html" `
Those scripts are executed by the node, and have full access to the blockchain api modules, and can insert node variable in the javascript generation with the %% tags. Like this it will become very easy to program distributed html5 apps. For the moment i'm finishing this script and polishing the API, after it will pick a new name, and make yet another website lol But this time with real documentation, examples, download, sources etc more technically oriented, now that the API is getting cleaner and the script parser is version 0.1 i can start to write more focused documentation. With the script it will be also easy to add the mempool and the p2p managment, so probably i'll end up running a beta coin in POW with it in the end lol I will see, anyway i'll create a new thread with a new site and new plan in the coming weeks !
|
|
|
|
|