Author

Topic: [ANN][XEL] Elastic Project - The Decentralized Supercomputer - page 292. (Read 450524 times)

legendary
Activity: 942
Merit: 1026
project looks very good.
I'm glad I donated in the early stages (before block 400000) Smiley
legendary
Activity: 1260
Merit: 1168
1. Is there a reason for 5m coins? Why not 0.5m or 50m? 21m would be much better for potential bitcoin investors.

2. The fee will be static at 1 XEL? In that case fee will be big problem of XEL like it was in case of NXT and because there will be 5m coins problem will show up earlier.

3. In NXT case many people left forging because with sums below 100k NXT they was wating too long for any kind of block. I've seen possible solution to this once - can we extract 10% from block reward and send them to the random (hallmarked) forger? This way even people with 100 XEL forging have chance to get rewarded for thier time and money spent on forging.

@Evil-Knievel how my concerns? Any response?

Hey, sorry that I didn't answer immediately. I am pretty busy getting all things together.

1. I have no idea why 5M coins. The guy who "invented" this project specified 5M (i guess he chose it randomly) and I sticked to that specification during development.

2. You are perfectly right! I have been thinking about this for a long time. For the testnet, I guess we can leave it like this but for the mainnet we have to find a better solution. Do you have any suggestions? I thought about some minimum threshold and then requiring a certain percentage of the transaction volume (again, capped by an upper bound). That would scale sort of. Whatever way we go, we have to make sure that DOS style blockchain spamming attacks remain too expensive to be carried out.

3. The POS style forging is just there for blockchain integrity. There is not much to be earned except the transaction fees. So yes, you are right we will experience the same "problem" as we have in NXT but the real XEL earning is done by solving the user-provided algorithms (by submitting bounties or proof of work transactions). These are scaled using a similar targeting mechanism as we have in Bitcoin except we adjust the target value each block. I like your idea with the hallmarked forger, but 10% will be nearly nothing. Again, the POS mining is just to ensure blockchain integrity and there is nothing to earn except the transaction fees. This was necessary because simply relying on the user-provided algorithms (and using them to form consensus about the blockchain) is prone to the so-called "faster algorithm attack" where a malicious miner creates a program that he knows a shortcut for and so can mine the majority of the blocks. By having a POS/POW combination we can circumvent that.
hero member
Activity: 535
Merit: 500
1. Is there a reason for 5m coins? Why not 0.5m or 50m? 21m would be much better for potential bitcoin investors.

2. The fee will be static at 1 XEL? In that case fee will be big problem of XEL like it was in case of NXT and because there will be 5m coins problem will show up earlier.

3. In NXT case many people left forging because with sums below 100k NXT they was wating too long for any kind of block. I've seen possible solution to this once - can we extract 10% from block reward and send them to the random (hallmarked) forger? This way even people with 100 XEL forging have chance to get rewarded for thier time and money spent on forging.

@Evil-Knievel how my concerns? Any response?
legendary
Activity: 1260
Merit: 1168
A very simple miner is finished, that will mine programs written in Elastic's own programming language "ElasticPL" and look for both bounties and POW solutions.

https://github.com/OrdinaryDude/elastic-miner

There is some room for improvement like do not pause "mining" while submitting solutions to the server, and a better GUI.

A video of how to use the entire Elastic framework, including how to create programs using ElasticPL, submitting them to the network and then using the miner to earn XEL will follow shortly.






hero member
Activity: 535
Merit: 500
1. Is there a reason for 5m coins? Why not 0.5m or 50m? 21m would be much better for potential bitcoin investors.

2. The fee will be static at 1 XEL? In that case fee will be big problem of XEL like it was in case of NXT and because there will be 5m coins problem will show up earlier.

3. In NXT case many people left forging because with sums below 100k NXT they was wating too long for any kind of block. I've seen possible solution to this once - can we extract 10% from block reward and send them to the random (hallmarked) forger? This way even people with 100 XEL forging have chance to get rewarded for thier time and money spent on forging.
legendary
Activity: 1330
Merit: 1000
wow. great!

so after one month, it is really possible to release the mainnet and hit exchanges?

hero member
Activity: 1092
Merit: 507
btcstakes.com
Project has a lot of potential, please keep it up. Early "donator" here.  Grin
legendary
Activity: 1260
Merit: 1168
nice work

Thanks,

here is an older video showing some insights. A lot has been done since, like a new tailored (and provably safe) programming language for the user-provided Proof-of-Work functions which can be also easily ported to GPUs, a functional mining application, and a lot more. I hope I find some time to make an updated video showing all the new stuff soon. There are a few little "meta" things to do tomorrow like allowing the "root" to reset the testnet using a special handcrafted transaction so we can "hard fork" new features into the testnet as the testing goes along quite easily.

sr. member
Activity: 358
Merit: 250
legendary
Activity: 1260
Merit: 1168
@Lannister: The genesis block is not getting updated. Seems the tx daemon crashes again. Please fix this when you read this.
legendary
Activity: 1260
Merit: 1168
Isarmatrose, if you read this ...
I need either access to your server or you being "available" so we can set up a faucet and a testnet bootstrap node on your server.
sr. member
Activity: 448
Merit: 250
Ben2016
Hello, what is the total XEL supply; i.e. the 5 million up for donation are what % of the total (or is 5M the total supply)?  Apologies if this is posted somewhere, I couldn't find it.

How is this different from Maidsafe and Golem Project?  Thanks.
hi, I believe the five million is the entire coin supply.
legendary
Activity: 1260
Merit: 1168
How is this different from Maidsafe and Golem Project?  Thanks.

AFAIK, although planned for a long time, there is no working Maidsafe "app" out there that would allow "farming" Safecoins by contributing processing power to the ecosystem. Correct me if I'm wrong on this.
Gridcoin does something similar to us, but albeit you earn Gridcoins for contributing CPU power, the distribution of the coins is not done by a decentralized protocol. In fact, some dude is checking the statistics of a centralized service (BOINC? SETI?) and crediting the users based on that. Of course he does that automatically, but that doesn't make it less centralized.
Golem claims they want to do the same thing but they, at least from what I can see, are still stuck in the "planning phase"? Am I also right on this?

There are several other approaches out there which clearly were "inspired" by our idea. Let's see how many will adopt parts of our source code  Wink  Everyone is welcome to do so.
newbie
Activity: 37
Merit: 0
Hello, what is the total XEL supply; i.e. the 5 million up for donation are what % of the total (or is 5M the total supply)?  Apologies if this is posted somewhere, I couldn't find it.

How is this different from Maidsafe and Golem Project?  Thanks.
member
Activity: 96
Merit: 10
Great EK, looks good. Any support for other languages other than the default. Its nice to have language options. How about including statistical one's. My understanding XEL is generic in nature.
legendary
Activity: 1260
Merit: 1168
For those of you who want to try out my suggestion for Elastic's new scripting language, do this:

1. Get the interpreter plus the demo file at:
https://github.com/OrdinaryDude/elastic-reference-client/tree/master/example_miner_new_language

2. Compile the interpreter
Code:
javac *.java

3. Take a look at the demo file which is written in "ElasticPL", Elastic's own programming language. Two posts above this one, there is a short description of the syntax. Feel free to play around with it.
This particular demo will mine "Bitcoin Block 0" and give back the correct nNonce which meets the Bitcoin target hash value required for block 0. As you can view in any block explorer, the correct block nonce should be "497822588" ... this is what this demo will find.

Code:
input 3;
m[3]=16777216;
m[4]=0;
m[5]=0;
m[6]=0;
m[7]=0;
m[8]=0;
m[9]=0;
m[10]=0;
m[11]=0;
m[12]=1000599037;
m[13]=2054886066;
m[14]=2059873342;
m[15]=1735823201;
m[16]=2143820739;
m[17]=2290766130;
m[18]=983546026;
m[19]=1260281418;
m[20]=699096905;
m[21]=4294901789;
m[22]=497811456 | (m[1] & 65535);
SHA256 3 80;
SHA256 3 32;
verify (m[10]==0);

4. This source file is saved under bitcoin_block_0.epl

5. Start the interpreter with the above source code as an argument like this:
Code:
java ElasticPL bitcoin_block_0.epl

6. Enjoy:

legendary
Activity: 1260
Merit: 1168

If you want any "built in functions" suggest them NOW! At the moment we have SHA256 and MD5 natively, all others must be implemented by the POW function authors. We can reduce the blockchain bloat by supporting the most common ones natively with just one simple command.


(remember, any built in function will be just one call in your POW function that you push to the network and therefore make it cheaper for you. This is because fees are calculated by the POW program size)


legendary
Activity: 1260
Merit: 1168

good work! i hope there will be a way to donate some XEL directly to you as soon as XEL goes live as i appreciate the responsivity and the calm and steady way you are developing this. thumbs up!

I have worked 14 hours straight today, and I would like to give you all a short status update and ask for a "feature request".
What I have done basically is create an entirely new programming language for elastic including a JIT compiler and an interpreter. The programming language is basic enough to be able to say that it is safe and that "eastereggs" like for example Soliticy's send bug are not possible. I would like to give you a short overview what is there and ask you all what you would like to have in it before we close that chapter for now.

1. The programming language does not allow the declaration of new variables. All you have is the integer state array m[0]-m[255]. This limits the memory overhead of the user-provided POW algorithms to 256*8 Bits. Dos attacks using "stack/heap exhaustion" or whatever are not possible.
Any other variable declarations are not allowed per the grammar, also m[256 and higher] are forbidden per grammer and result in a syntax error so other implementations (maybe we will have some in Go or so) cannot screw up here at all.

The programmer must make sure to use the state array in a "smart" manner!

2. We support the following operations:
+: Addition
-: Subtraction
*: Multiplication
/: Integer Division
%: Modulo Operation
>>: Right Shift 32bit
<<: Left Shift 32bit
>>>: Right Rotate 32bit
<<<: Left Rotate 32bit
~: Bitwise Complement
!: Logical Negation
^: Bitwise XOR 32 bit
&: Bitwise OR 32 bit
|: BitWise AND 32bit

3. And we support the following relational exressions:
<: smaller
>: larger
<=: smaller than
>=: greater than
==: equal
=!: not equal

4, And the following conditional expressions:
&&:  and
||: or

5. Additionally, we have two (ASK FOR MORE NOW, PLEASE!!) built in functions:
Code:
SHA256 x y;
MD5 x y;
Which start at the beginning of m[ x ] and take y byte from there to hash it with the given hash function. In this case, the state array is overwritten beginning at the first byte of m[ x ] with HASH_LENGTH bytes.

6. We support
- if statements
- while statements

7. The "random integers" provided by the miners are stored in m[ 0 ]-m[ ... ] (depending on how many the POW author requests).

8. Every source file must start with "input x;" while x is a value between 3 and 12 and describes how many random integers are shuffled by the miners. Those are added to the state beginning at m[0]...

9. Every source file must end with "verify STATEMENT;" which is the bounty submission check. This line is a Statement that evaluated to either true or false and tells us if the result is "a bounty" or not.



EXAMPLE
======


This is very theoretical, I know! I will give a practical example tomorrow so everyone can try one. For those who are interested in diving into the technical backgrounds ...

Here is a Bitcoin-Mining-Function that would mine the Genesis Block 0 and that is written in Elastics internal programming language:


SMALL AND COMPACT, ISN'T IT???
Wink

It is basically putting the block header into the internal state using Elastic's Programming Language's syntax in "unsigned integer coding" and calls SHA256 Twice, once hashing all 80 bytes of the block header and the second time only the 32 bytes of the resulting hash. The nonce is "shuffled" using the random input fed by the "miners" from m[ 1 ] ;

Tested ;-) Works! ;-)

Code:
input 3;
m[3]=16777216;
m[4]=0;
m[5]=0;
m[6]=0;
m[7]=0;
m[8]=0;
m[9]=0;
m[10]=0;
m[11]=0;
m[12]=1000599037;
m[13]=2054886066;
m[14]=2059873342;
m[15]=1735823201;
m[16]=2143820739;
m[17]=2290766130;
m[18]=983546026;
m[19]=1260281418;
m[20]=699096905;
m[21]=4294901789;
m[22]=497822464 | (m[1] & 255);
SHA256 3 80;
SHA256 3 32;
verify m[10]==0;

The Bounty hook function which must be the last instruction in the source code in this case is "checking for 32 leading zerobits which in fact are trailing zero bits due to endianess".
This is simply:

Code:
verify m[10]==0;


And this is the grammar of ElasticPL (POW) for now:

Code:

SKIP :
{
  " "
| "\t"
| "\n"
| "\r"
| "\f"
}


TOKEN :
{
  < INTEGER_LITERAL: ()+ >
}


void CompilationUnit() :
{
   String name;
}
{
   (
       Statement()
   )*
   FinalBountyCheckExpression()
  
}

void FinalBountyCheckExpression() :
{}
{
  "verify" Expression() ";"
}

void Expression() #void:
{}
{
  LOOKAHEAD( PrimaryExpression() "=" )
  Assignment()
|
  ConditionalOrExpression()
}


void Assignment() #Assignment(2) :
{}
{
  PrimaryExpression() "=" Expression()
}


void ConditionalOrExpression() #void :
{}
{
  ConditionalAndExpression()
  ( "||" ConditionalAndExpression() #OrNode(2) )*
}


void ConditionalAndExpression() #void :
{}
{
  InclusiveOrExpression()
  ( "&&" InclusiveOrExpression() #AndNode(2) )*
}


void InclusiveOrExpression() #void :
{}
{
  ExclusiveOrExpression()
  ( "|" ExclusiveOrExpression() #BitwiseOrNode(2) )*
}


void ExclusiveOrExpression() #void :
{}
{
  AndExpression()
  ( "^" AndExpression() #BitwiseXorNode(2) )*
}


void AndExpression() #void :
{}
{
  EqualityExpression()
  ( "&" EqualityExpression() #BitwiseAndNode(2) )*
}


void EqualityExpression() #void :
{}
{
  RelationalExpression()
  (
     "==" RelationalExpression() #EQNode(2)
   |
     "!=" RelationalExpression() #NENode(2)
  )*
}


void RelationalExpression() #void :
{}
{
  AdditiveExpression()
  (
    "<" AdditiveExpression() #LTNode(2)
   |
    ">" AdditiveExpression() #GTNode(2)
   |
    "<=" AdditiveExpression() #LENode(2)
   |
    ">=" AdditiveExpression() #GENode(2)
  )*
}


void AdditiveExpression() #void :
{}
{
  MultiplicativeExpression()
  (
    "+" MultiplicativeExpression() #AddNode(2)
   |
    "-" MultiplicativeExpression() #SubtractNode(2)
  )*
}


void MultiplicativeExpression() #void :
{}
{
  UnaryExpression()
  (
    "*" UnaryExpression() #MulNode(2)
   |
    "/" UnaryExpression() #DivNode(2)
   |
    "%" UnaryExpression() #ModNode(2)
   |
    ">>" UnaryExpression() #RShiftNode(2)
   |
    "<<" UnaryExpression() #LShiftNode(2)
   |
    ">>>" UnaryExpression() #RRotNode(2)
   |
    "<<<" UnaryExpression() #LRotNode(2)
  )*
}


void UnaryExpression() #void :
{}
{
  "~" UnaryExpression() #BitwiseComplNode(1)
|
  "!" UnaryExpression() #NotNode(1)
|
  PrimaryExpression()
}


void PrimaryExpression() #void :
{
   String name;
}
{
  Literal()
|
  Id()
|
  "(" Expression() ")"
}


void Id() :
{
   Token t;
}
{
   t =  { jjtThis.name = t.image; }
}


void Literal() #void :
{
   Token t;
}
{
 (
  t=
    {
       jjtThis.val = Integer.parseUnsignedInt(t.image);
    }
 )#IntConstNode
|
  BooleanLiteral()
}


void BooleanLiteral() #void :
{}
{
  "true" #TrueNode
|
  "false" #FalseNode
}


void Statement() #void :
{}
{
  ";"
|
  LOOKAHEAD(2)
  LabeledStatement()
|
  Block()
|
  StatementExpression()
|
  IfStatement()
|
  WhileStatement()
|
  HashStatement()
}


void HashStatement() #void :
{}
{
   SHA256()
 |
   MD5()
}
void SHA256() :
{ Token t1; Token t2; }
{
   "SHA256" t1 = t2 =
   { jjtThis.position_to_start = Integer.valueOf(t1.image); jjtThis.byte_length = Integer.valueOf(t2.image); }
}
void MD5() :
{ Token t1; Token t2; }
{
   "MD5" t1 = t2 =
   { jjtThis.position_to_start = Integer.valueOf(t1.image); jjtThis.byte_length = Integer.valueOf(t2.image); }
}



void LabeledStatement() #void :
{}
{
   ":" Statement()
}


void Block() :
{}
{
  "{" ( Statement() )* "}"
}


void StatementExpression() :
{}
{
  Assignment() ";"
}


void IfStatement() :
{}
{
  "if" "(" Expression() ")" Statement() [ LOOKAHEAD(1) "else" Statement() ]
}


void WhileStatement() :
{}
{
  "while" "(" Expression() ")" Statement()
}


TOKEN :
{
  < IDENTIFIER: "m[" (||||) "]" >
|
  < #DIGIT: [ "0"-"9" ] >
|
  < #NOZERODIGIT: [ "1"-"9" ] >
|
  < #ONE: [ "1" ] >
|
  < #TWO: [ "2" ] >
|
  < #ZEROTOFOUR: [ "0"-"4" ] >
|
  < #FIVE: [ "5" ] >
|
  < #ZEROTOFIVE: [ "0"-"5" ] >
}
ImI
legendary
Activity: 1946
Merit: 1019

good work! i hope there will be a way to donate some XEL directly to you as soon as XEL goes live as i appreciate the responsivity and the calm and steady way you are developing this. thumbs up!
legendary
Activity: 1204
Merit: 1000
Will the testnet be still live the 30th July?

I have an important talk tomorrow so please forgive me that I was so quiet in the last days.
While it is pretty tough to get everything working flawlessly until the 30th I think that we are really close to launch the testnet.
I would say that it's realistic to get a testnet working by let's say 4. August which is in about a week.

I will give the promised status update tomorrow after I am done with my talk. Have to get back to polishing my slides now.

Your doing a great job now, at first i was a little sceptic about the coin, but its looking really good now, thx for the hard work.
Jump to: