Neptune<p>All things Neptune.</p>
https://talk.neptune.cash/inn/12025-03-23T10:51:38+00:00Upgrade to v0.2.0 now!sword_smith2025-03-232025-03-2343
<p>At block height 6.000 the blockchain hard forks to allow for higher transaction throughput. Be sure to upgrade to v0.2.0 immediately or risk being caught on the wrong fork, unable to rejoin the network.</p>
<p><a href="https://github.com/Neptune-Crypto/neptune-core/releases/tag/v0.2.0" rel="noopener noreferrer">New version can be found here</a>.</p>
Backup wallet randomnesssword_smith2025-03-192025-03-1942
<p>While much effort is being put into making all funds recoverable from the seed word, it’s a lot safer to backup the seed word in combination with the wallet’s incoming randomness. This incoming randomness is extra cryptographic data that is required to spend the wallet’s UTXOs.</p>
<p>I just added a script to the <code>neptune-core</code> repo that uses <code>rsync</code> to backup wallet files to a remote server. The script assumes that you have also stored your seed phrase, which is contained in <code>wallet.dat</code>.</p>
<p>Have a look at the script <a href="https://github.com/Neptune-Crypto/neptune-core/blob/11e0616a3ceeaf6bd7d0a8816b4725e5701cb794/scripts/linux/backup-neptune-core-randomness.sh" rel="noopener noreferrer"><code>scripts/linux/backup-neptune-core-randomness.sh</code></a>.</p>
<p>To clarify: I recommend only backing up <code>incoming_randomness.dat</code> and <code>outgoing_randomness.dat</code> like this. The seed word list (content of <code>wallet.dat</code>) should be backed up in another way, the same way you back up your other blockchain seed phrases.</p>
Limit number of incoming connections on Linuxsword_smith2025-03-192025-03-1941
<p>Well-connected nodes that receive many incoming connections attempts can experience hanging problems. It’s a problem we should fix in the <code>neptune-core</code> application but until we have, you can use the following commands to let the Linux kernel do the heavy lifting for us.</p>
<pre style="background-color:#ffffff;"><span style="color:#323232;">sudo iptables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">A </span><span style="color:#0086b3;">INPUT </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">p tcp </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">dport </span><span style="color:#0086b3;">9798 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">m connlimit </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">connlimit</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">above </span><span style="color:#0086b3;">50 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">j </span><span style="color:#0086b3;">REJECT </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">reject</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">with tcp</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">reset
</span><span style="color:#323232;">sudo iptables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">A </span><span style="color:#0086b3;">INPUT </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">p tcp </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">dport </span><span style="color:#0086b3;">9798 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">m limit </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">limit </span><span style="color:#0086b3;">2</span><span style="font-weight:bold;color:#a71d5d;">/</span><span style="color:#323232;">sec </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">limit</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">burst </span><span style="color:#0086b3;">2 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">j </span><span style="color:#0086b3;">ACCEPT
</span><span style="color:#323232;">sudo ip6tables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">A </span><span style="color:#0086b3;">INPUT </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">p tcp </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">dport </span><span style="color:#0086b3;">9798 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">m connlimit </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">connlimit</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">above </span><span style="color:#0086b3;">50 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">j </span><span style="color:#0086b3;">REJECT </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">reject</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">with tcp</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">reset
</span><span style="color:#323232;">sudo ip6tables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">A </span><span style="color:#0086b3;">INPUT </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">p tcp </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">dport </span><span style="color:#0086b3;">9798 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">m limit </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">limit </span><span style="color:#0086b3;">2</span><span style="font-weight:bold;color:#a71d5d;">/</span><span style="color:#323232;">sec </span><span style="font-weight:bold;color:#a71d5d;">--</span><span style="color:#323232;">limit</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">burst </span><span style="color:#0086b3;">2 </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">j </span><span style="color:#0086b3;">ACCEPT
</span></pre>
<p>This limits the number of incoming TCP connections to your 9798 port to 50. And prevents more than 2 new connections per second. This limit applies regardless of the IP of the machine connecting to you. The rules apply for both IPv4 and IPv6.</p>
<p>Verify new rules:</p>
<pre style="background-color:#ffffff;"><span style="color:#323232;">sudo iptables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">L </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">v </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">n
</span><span style="color:#323232;">sudo ip6tables </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">L </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">v </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">n
</span></pre>
<p>Persist the new rules:</p>
<pre style="background-color:#ffffff;"><span style="color:#323232;">sudo apt update </span><span style="font-weight:bold;color:#a71d5d;">&&</span><span style="color:#323232;"> sudo apt install netfilter</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">persistent
</span><span style="color:#323232;">sudo netfilter</span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">persistent save
</span></pre>
<p>Port 9798 is the standard port used by <code>neptune-core</code>. If you have set your <code>--peer-port</code> value to something, adjust the above commands.</p>
Pull request for "hard fork 1"sword_smith2025-03-172025-03-1739
<p>Please weigh in on this pull request if you have opinions on it one way or another:
<a href="https://github.com/Neptune-Crypto/neptune-core/pull/502" rel="noopener noreferrer">https://github.com/Neptune-Crypto/neptune-core/pull/502</a></p>
<p>Blog post about this hard fork coming to our website <a href="https://neptune.cash" rel="noopener noreferrer">neptune.cash</a> ASAP.</p>
triton-vm ./factorial run failed in 128G Memory Machinemarco2025-03-182025-03-1840
<p>change the intput to PublicInput::from([bfe!(128_000u32)]);
we got Padded Height is 2M .
run in diff machine. 512G memmory is right
but in 128G memory and 32G swap got fail
thread ‘main’ panicked at triton-vm/examples/factorial.rs:96:5:
assertion failed: verdict
change the input to 64000. both is ok
how to check this issue?</p>
Suggestions for IRCAramaicAllspice2025-03-162025-03-1638
<p>I am wondering what the best way to use IRC would be.</p>
<p>I have played a bit around with weechat, but I noticed that messages do not persist. I like using linux, but am looking for software maybe that is in homebrew and would work well on a mac too. Any suggestions for what to try are appreciated. I am currently typing this all out in w3m in a terminal interface, and I would like a terminal interface for the IRC channel as well, with more robust server management for handling messages when I’m offline; I’d like to still be part of the conversation and to see the history of the chat. </p>
Testnet is now runningsword_smith2025-03-152025-03-1537
<p>Testnet is a network that behaves just like main net, but where all the coins are intended to be worthless, so you can play around without bad consequences.</p>
<p>I started up a testnet node that I plan to keep running. For now, I’m also composing and guessing on this network. I cannot guarantee that there will always be composing and guessing happening from my machine but at least one node should always be available.</p>
<p>You can reach it on <code>51.15.139.238:19798</code>, so by launching <code>neptune-core --network testnet --peers 51.15.139.238:19798 --peer-port 19798 --rpc-port 19799</code>, you can connect to it.</p>
List of publicly available APIssword_smith2025-03-142025-03-1436
<p>The <code>neptune-core</code> program comes with both a CLI interface for interacting with the program, and with an RPC server. But you can also get information about the blockchain without running <code>neptune-core</code>. </p>
<p>Both available block explorers that I know of offer some services through a HTTP/JSON interface.</p>
<p>Documentation of the API of the internally developed block explorer can be found on the front page:
<a href="https://neptunefundamentals.org/" rel="noopener noreferrer">https://neptunefundamentals.org/</a>. </p>
<p>As an example, you can get the digest of the current tip with a GET request to <code>https://neptunefundamentals.org/rpc/block_digest/tip</code>.</p>
<pre style="background-color:#ffffff;"><span style="color:#323232;">curl </span><span style="font-weight:bold;color:#a71d5d;">-</span><span style="color:#323232;">s https:</span><span style="font-style:italic;color:#969896;">//neptunefundamentals.org/rpc/block_digest/tip
</span><span style="color:#183691;">"6081b4799f46350ba33405f81c57647c971327b24e6c0241e89b91c64b6ea18d9274020000000000"
</span></pre>
<p>The block explorer developed by an external team has their API documented <a href="https://neptune.vxb.ai/doc-api" rel="noopener noreferrer">here</a>. You can, for example, get an overview of the network state through</p>
<pre style="background-color:#ffffff;"><span style="color:#323232;">curl 'https:</span><span style="font-style:italic;color:#969896;">//neptune.vxb.ai/api/overview'
</span><span style="color:#323232;">{</span><span style="color:#183691;">"message"</span><span style="color:#323232;">:</span><span style="color:#183691;">""</span><span style="color:#323232;">,</span><span style="color:#183691;">"overview"</span><span style="color:#323232;">:{</span><span style="color:#183691;">"average_block_time"</span><span style="color:#323232;">:</span><span style="color:#0086b3;">581.71326</span><span style="color:#323232;">,</span><span style="color:#183691;">"block_hash"</span><span style="color:#323232;">:</span><span style="color:#183691;">"6081b4799f46350ba33405f81c57647c971327b24e6c0241e89b91c64b6ea18d9274020000000000"</span><span style="color:#323232;">,</span><span style="color:#183691;">"cumulative_proof_of_work"</span><span style="color:#323232;">:</span><span style="color:#183691;">"116021393513180138"</span><span style="color:#323232;">,</span><span style="color:#183691;">"day_reward"</span><span style="color:#323232;">:</span><span style="color:#183691;">"19072000000000000000000000000000000"</span><span style="color:#323232;">,</span><span style="color:#183691;">"height"</span><span style="color:#323232;">:</span><span style="color:#0086b3;">4611</span><span style="color:#323232;">,</span><span style="color:#183691;">"network_speed"</span><span style="color:#323232;">:</span><span style="color:#183691;">"93543182191"</span><span style="color:#323232;">,</span><span style="color:#183691;">"proof_target"</span><span style="color:#323232;">:</span><span style="color:#183691;">"59422205698320"</span><span style="color:#323232;">,</span><span style="color:#183691;">"timestamp"</span><span style="color:#323232;">:</span><span style="color:#183691;">"Fri, 14 Mar 2025 17:05:27 +0800"</span><span style="color:#323232;">,</span><span style="color:#183691;">"total_fee"</span><span style="color:#323232;">:</span><span style="color:#183691;">"567518114400000011349411601848991744"</span><span style="color:#323232;">,</span><span style="color:#183691;">"total_reward"</span><span style="color:#323232;">:</span><span style="color:#183691;">"1421696000000000000000000000000000000"</span><span style="color:#323232;">,</span><span style="color:#183691;">"utxo_count"</span><span style="color:#323232;">:</span><span style="color:#0086b3;">19172</span><span style="color:#323232;">},</span><span style="color:#183691;">"success"</span><span style="color:#323232;">:</span><span style="color:#0086b3;">false</span><span style="color:#323232;">}
</span></pre>
List of block explorers for Neptunesword_smith2025-03-142025-03-1435
<p>This post is intended to give readers an overview of block explorers for the Neptune Cash blockchain.</p>
<p>I know of three URLs that host block explorers:</p>
<ul>
<li><a href="https://neptunefundamentals.org/" rel="noopener noreferrer">neptunefundamentals.org</a></li>
<li><a href="https://explorer.neptune.cash/" rel="noopener noreferrer">explorer.neptune.cash</a></li>
<li><a href="https://neptune.vxb.ai/" rel="noopener noreferrer">neptune.vxb.ai</a></li>
</ul>
<p>The source code of the two former block explorers can be found <a href="https://github.com/Neptune-Crypto/neptune-explorer" rel="noopener noreferrer">here</a> on GitHub.</p>
<p>Please add more links in the responses as more block explorers become available :)</p>
FAQaszepieniec2024-12-192024-12-1925
<p>This thread collects frequently asked questions (and answers).</p>
External guesserssword_smith2025-03-122025-03-1234
<p>A user on Telegram asked me for pointers on how to run guessers in other programs than the neptune-core blockchain client.</p>
<p>For this purpose, we have added three endpoints to the RPC server: <a href="https://github.com/Neptune-Crypto/neptune-core/blob/d55ef2e4ad8e9e12e4e3a06d9559a31ad97dc300/src/rpc_server.rs#L1370C14-L1370C37" rel="noopener noreferrer"><code>pow_puzzle_external_key</code></a>, <a href="https://github.com/Neptune-Crypto/neptune-core/blob/d55ef2e4ad8e9e12e4e3a06d9559a31ad97dc300/src/rpc_server.rs#L1358" rel="noopener noreferrer"><code>pow_puzzle_internal_key</code></a>, and <a href="https://github.com/Neptune-Crypto/neptune-core/blob/d55ef2e4ad8e9e12e4e3a06d9559a31ad97dc300/src/rpc_server.rs#L1788" rel="noopener noreferrer"><code>provide_pow_solution</code></a>. The data structure <a href="https://github.com/Neptune-Crypto/neptune-core/blob/d55ef2e4ad8e9e12e4e3a06d9559a31ad97dc300/src/rpc_server.rs#L211" rel="noopener noreferrer"><code>ProofOfWorkPuzzle</code></a> contains the data necessary to do proof-of-work hashing, and the fastest way that I know of to do that on a CPU is through the function <a href="https://github.com/Neptune-Crypto/neptune-core/blob/d55ef2e4ad8e9e12e4e3a06d9559a31ad97dc300/src/mine_loop.rs#L321" rel="noopener noreferrer"><code>fast_kernel_mast_hash</code></a> which is defined in <code>mine_loop.rs</code>.</p>
<p>For those who haven’t been following this project for long, mining consists of two parts: composing and guessing. The network only needs a few extremely high performing machines to do composition. So if you want to mine Neptune coins but you don’t own an AMD Threadripper 7995wx or an even more powerful machine, guessing is what you should go for.</p>
<p>Happy to answer any questions you may have.</p>
New block explorer! And public API!!sword_smith2025-03-122025-03-1233
<p>I was recently informed that there’s a new and much prettier block explorer than the one we (the team behind Neptune) made. Check it out:
<a href="https://neptune.vxb.ai/" rel="noopener noreferrer">neptune.vxb.ai</a></p>
<p>It’s of course limited what you can show on a privacy-preserving blockchain like Neptune. But it’s still possible to see with what frequency the blocks are coming in, how the mining rewards are distributed (between guesser and composer), and how many UTXO inputs and outputs each block contains.</p>
<p>I especially like the graphs on this new block explorer. It’s nice to see the changing difficulty visualized like this.</p>
how run TritonVM profiler log?marco2025-03-062025-03-0632
<p>https://github.com/TritonVM/triton-vm/blob/master/triton-vm/Cargo.toml#L63 has a profile features. Do you know how to turn on this flags?</p>
What can we do for mining pool operators?sword_smith2025-02-282025-02-2831
<p>A popular request is the ability to mine Neptune Cash through a mining pool. </p>
<p>The current situation is that you need to run the <code>neptune-core</code> program to do what we call “guessing” but is traditionally called “mining”: the attempt to solve the PoW-puzzle by finding a nonce that makes the block hash fall below the threshold defined by the consensus mechanism. However, a more modern approach is to outsource the guessing to external programs like GPU binaries and mining pool servers.</p>
<p>To allow for external programs and mining pools to do the guessing, I’ve added two endpoints to the RPC client: <code>pow_challenge</code> to get the cryptographic information required to start guessing and <code>pow_solution</code> to provide a solution that meets the threshold. These two endpoints, at the time of writing, only live on the <code>thv/external-guessers</code> branch in the <code>neptune-core</code> repository.</p>
<p>Would this suffice to run a mining pool for Neptune? Are the data models adequate. Happy to hear feedback.</p>
<p>Another feature that we have in our pipeline is the ability to define callback programs (shell scripts?) that are run everytime the client experiences an event, such as a new block, a new block proposal (relevant for mining pools), or a new transaction.</p>
<p>Please note that the endpoint names and return types are still in flux; they might change prior to the next release.</p>
how to run Tip5::hash_pair In GPU with Futharkmarco2025-02-272025-02-2730
<p>I Found https://github.com/Sword-Smith/ruthark repo,but it need git clone private git repo in readme.md
Clone this repo: $ git clone ssh://git@neptune.builders:2222/ulrik-dk/gpu-accelerator.git</p>
Estimate own hash ratesword_smith2025-02-262025-02-2629
<p>Multiple people have requested a way to estimate your machine’s hash rate to evaluate if guessing is worth it or not. In case you’re not up to speed with Neptune’s mining lingo, guessing is the calculation of block hashes to find a hash digest that is lower than the threshold value. This is done by feeding the Tip5 hash function the block along with a nonce and then calculating the resulting hash. If the hash value is below the threshold dictated by the protocol, you win the block race and get to collect the guesser fee.</p>
<p>The higher your “guess rate” AKA hash rate, the more tickets you get in the proof-of-work lottery.</p>
<p>There’s not yet a way to inspect your guess rate through the dashboard or CLI, but I just added a benchmark to help with this.</p>
<p>You can run the benchmark <code>fast_kernel_mast_hash</code> found in the <code>neptune-core</code> repository through the command <code>cargo bench fast_kernel_mast_hash</code> to get your guess rate. It will report the time it takes your machine to calculate 1,000,000 guesses. If this takes 1 seconds, your guess rate is 1 million.</p>
<p>To get an estimate of your chance of finding the next block, you can (roughly) multiply this number by 400, since the average guessing time is about 400 seconds (200 seconds is used for composition, and block target interval is ~600 seconds) and then divide the result by the current tip’s difficulty. So with 1 million guesses per second, you should expect to find 40 % of all blocks, if the difficulty is 1bn. With a difficulty of 1 trillion, your win-rate would be 0.04 %, or 4 blocks out of 10,000.</p>
<p>The benchmark was added in <a href="https://github.com/Neptune-Crypto/neptune-core/commit/81e1264afd61c8a768ad7d90c90b340303a2146d" rel="noopener noreferrer">this commit</a></p>
Brainstorming: Neptune, exchanges, price discovery.danda2024-12-292024-12-2927
<p>Exchange listings are generally necessary for price-discovery of a cryptocurrency. Or at least they are a shortcut to price-discovery.</p>
<p>In recent years centralized exchanges (CEX) have been delisting “privacy coins” left and right. Even monero, the largest privacy coin by usage, has been delisted from most CEX.</p>
<p>I may be wrong, but I believe Neptune will face an uphill, costly fight if efforts are made to get listed on CEX. It may be better to not even attempt that path, but rather focus efforts on the Decentralized Exchange (DEX) path from the start. DEX makes a critical component of the neptune ecosystem more resilient to attacks. Further if DEX is part of neptune’s “core DNA” from the start, then the community that forms around it will value that model and pass it on to newcomers, strengthening the entire ecosystem and ethos.</p>
<p>Broadly speaking, there are a few types of DEX:</p>
<ol>
<li>CryptoCurrency <—> Fiat.</li>
</ol>
<p>The best known example is Bisq, a DEX that enables bitcoin <–> fiat trades, and bitcoin <–> altcoin trades. It is bitcoin centric, and it includes its own token (BSQ) and a Decentralized Autonomous Organization (DAO) proposal/voting mechanism for change management and rewarding contributors.</p>
<p>The Monero community has created a fork of Bisq called Haveno that enables monero <–> fiat trades and monero <–> altcoin trades. It is monero centric. It does NOT include its own token or a DAO. It is just an exchange, as Bisq was in its early days.</p>
<p>Both Bisq and Haveno are written in Java, although a bare-bones rust prototype of Bisq called <a href="https://github.com/bodymindarts/risq" rel="noopener noreferrer">Risq</a> was created approx 5 years ago.</p>
<ol start="2">
<li>Tokens/Erc-20.</li>
</ol>
<p>These are typically smart contracts operating on a blockchain such as Ethereum that provides some kind of “wrapped” token for each supported cryptocurrency, and for fiat as well, and bidirectional bridges. These require trust in the bridge operators, the wrapped token mechanism, the underlying blockchain, and the fiat stablecoin operators.</p>
<ol start="3">
<li>“Local” or Face-2-Face (F2F) websites.</li>
</ol>
<p>In the past there was localbitcoins, localmonero, agora desk, etc.</p>
<p>For F2F trades, all that is needed is a website for people to post a city, contact details, typically via an anon messaging system, and some basic info about the types of trades they perform (buys or sells, price/percentage, limits). </p>
<p>Sites such as localbitcoins and localmonero provided an escrow service and tried to force users into it, ostensibly for security, but mostly so the website could take a cut. Despite the “local” in their names, both sites mostly concentrated on online payments and kind of neglected the F2F experience, again because it leads away from escrow or any reliance on the website after the first trade/introduction.</p>
<p>Making the website a middleman in each transaction is also a liability for the website operator as it potentially introduces a legal responsibility to ensure there is no criminal activity happening, etc, which then may legally require KYC, etc. I believe this is why most of these types of websites have ceased operations in recent years.</p>
<p>It is my contention that a website that focuses on providing a first class F2F matching/introduction service would be a useful thing, and has never really been done right, to date. Such a site would be simple to build and cheap to operate. Once created it could subsist on community donations. The source code and database could both be open, so that if any one instance is attacked or taken down, another can pop-up. The website is never a middleman in any transaction and takes no fees, so there should not be any legal obligation (ianal) to perform KYC or other checks.</p>
<ol start="4">
<li>Everything else.</li>
</ol>
<p>There are some other systems out there such as ThorChain. I’m not sure how applicable they could be for Neptune. Happy to hear of suggestions, more details…. </p>
<p>What makes sense for Neptune?</p>
<p>Many possibilities exist. Here are some:</p>
<ol>
<li>
<p>Attempt to get neptune listed on Bisq or Haveno. Encourage people to trade fiat –> bitcoin –> neptune on Bisq, or fiat –> monero –> neptune on Haveno. This is a slow process, with possible slippage at each step. note also that it may be next to impossible to get listed on Bisq until Bisq v2 is ready.</p>
</li>
<li>
<p>Fork Bisq or Haveno or Risq and make a Neptune-centric version of it. This would be a lot of work, but long-term may have a nice payoff.</p>
</li>
<li>
<p>create a neptune bridge and wrapped token on ethereum and possibly other blockchains or layer-2s. Then people could easily trade stablecoins and other tokens for a neptune token, and eventually bridge it back out to real neptune. This tends to keep most economic trading activity on the host blockchain however.</p>
</li>
<li>
<p>create something like erc-20 and an exchange smart-contract on neptune itself. There would probably need to be a token/wrapper and bridge for at least 1 stablecoin. and emulate enough APIs for clients like metamask to interact. This is potentially a lot of work, but eventually it seems it must happen in some manner, if neptune is to flourish.</p>
</li>
<li>
<p>Local trading website. A basic website, without escrow or fees, and focusing on F2F only could probably be built in a couple of weeks and provide a lot of utility for early neptune users to connect with eachother for trades.</p>
</li>
</ol>
<p>Summary:</p>
<p>(1) and (3) may be relatively fast to setup but have significant drawbacks.</p>
<p>(2) and (4) are likely better long term solutions, but may take considerable development effort, resources, time.</p>
<p>(5) is relatively simplest to build, and should be done first, imho, as the lowest hanging fruit. If there is interest, I can describe the vision/concept in greater detail.</p>
<p>Note that both Bisq and Monero have mechanisms in place for developers to make proposals and the community to fund those proposals. Likely Neptune will need such a system, but that’s for another post… </p>
question about FRI?wuxiu2025-01-012025-01-0128
<p>I am wondering about the necessary of FRI to test the low degree of boundary quotient. (boundary_quotient_codewords). </p>
<p>As for https://neptune.cash/learn/stark-anatomy/stark/
In the verify side, the last check of verify procedure has ensured the link between boundary quotient and transition quotient. “Verify the link between boundary quotients and transition quotient. To do this”</p>
<p>According to the stark_anatomy source code, the verify functions check the following equation:
verifier_accepts = verifier_accepts and (combination == values[i])</p>
<p>So does this check include the correctness of boundary quotient ? I think boundary quotient should be correct if the above check is successful.</p>
<p>Thanks.</p>
question about STARK transition constraints? thanks.wuxiu2024-12-222024-12-2226
<p>I was wondering about the transition polynomials when reading the stark-anatomy source code.</p>
<p>To get dense trace polynomial , subtract the boundary interpolant from the trace polynomial, then divide boundary zerofiers and give rise to boundary quotient.</p>
<p>But for transition polynomial, the transition_quotients are generated by only dividing by transition_zerofiers without subtracting interpolants? So this divding ensure the </p>
<p>Why does the difference exists?</p>
<h1>symbolically evaluate transition constraints</h1>
<pre><code> point = [Polynomial([self.field.zero(), self.field.one()])] + trace_polynomials + [tp.scale(self.omicron) for tp in trace_polynomials]
print("begin symbolic eva:point len=",len(point),",transition_constraints len=",len(transition_constraints))
transition_polynomials = [a.evaluate_symbolic(point) for a in transition_constraints]
print("end symbolic eva")
# divide out zerofier
transition_quotients = [tp / self.transition_zerofier() for tp in transition_polynomials]
</code></pre>
question about STARK boundary constraints? thanks.wuxiu2024-12-142024-12-1424
<p>Hi all,</p>
<p>I’m wondering why the boundary constraints doesn’t include the input element which is included in the trace when I read the source code of stark-anatomy:https://github.com/aszepieniec/stark-anatomy/blob/master/code/rescue_prime.py</p>
<pre><code>def boundary_constraints( self, output_element ):
constraints = []
# at start, capacity is zero
constraints += [(0, 1, self.field.zero())]
# at end, rate part is the given output element
constraints += [(self.N, 0, output_element)]
return constraints</code></pre>
how to solve running sync problem?wuxiu2024-12-102024-12-1023
<p>Hi all,</p>
<p>I just launched the Neptune-core for the first time, and it shows the following msgs, I’m not sure whether it is normal or error?</p>
<p>Established outgoing TCP connection with 151.115.78.81:9798
Outgoing connection accepted by 51.15.139.238:9798
Entering synchronization mode due to peer 51.15.139.238:9798 indicating tip height 2808; pow family: ProofOfWork([1763900518, 197, 0, 0, 0, 0])
Running sync
Creating new sync request
Sending block batch request to 151.115.78.81:9798
requesting blocks descending from 08216218079960280509,12846237429271989926,03698217512493722044,05661204014965294855,17508843091365388130</p>
<p>the following msgs repeated for long time ,almost 1 hours till now:
Running sync
Waiting for last sync to complete.</p>
<p>also with the following msgs sometimes:
Connecting to peer [2606:c700:4020:25:b62e:99ff:fef8:af3e]:9798 with distance 2
2024-12-10T03:20:35.605626109Z WARN ThreadId(01) neptune_cash: executed run()::select::peer_discovery_timer in 0.001815681 secs. exceeds slow fn threshold of 0.001 secs. location: /home/pan/neptune/neptune-core/src/main_loop.rs:1415:21
2024-12-10T03:20:35.605726851Z WARN ThreadId(21) neptune_cash::connect_to_peers: Failed to establish connection: Network is unreachable (os error 101)
2024-12-10T03:20:35.605792563Z INFO ThreadId(21) neptune_cash::connect_to_peers: Connection closing</p>
Hello,as a miner,what contributions can I make?seabiscuit402024-10-192024-10-1921
<p>Hello everyone, scientists, developers, and members of the Neptune community! </p>
<p>I’m new here and eager to learn more. I’d like to know when I can start participating in the mining of this project. Additionally, as a miner, what contributions can I make, such as participating in testnet nodes? Thank you!</p>
Question about Arithmetic Intermediate Representation (AIR)?wuxiu2024-12-092024-12-0922
<p>Hi all, </p>
<p>I’m reading alanszepieniec’blog about START implementation https://neptune.cash/learn/stark-anatomy/stark/</p>
<p>I’m wondering why it should subtract boundary interpolants from trace polynomials?</p>
<p>“Instead, the prover interpolates the boundary points and subtracts the resulting interpolants from the trace polynomials. This procedure produces the dense trace polynomials, for lack of a better name”</p>
<p>Thank you very much.</p>
Neptune Team & Community need a Matrix and SimpleX group channeli2pZ7812HTZV692024-05-042024-05-0418
<p>Its more efficient to have a modern, refine, private & encrypted communication channel or groups</p>
<p>Matrix & SimpleX (and even Sessions) is a good options since many privacy communities are already there and even many privacy developer/researcher are present there.</p>
<p>Its will be a good platform for collaboration with others.</p>
New Year, New Possibilities. Blue Sky suggestions welcome.danda2024-01-142024-01-1413
<p>I’m making this thread for anyone to throw out ideas for Neptune. Basically, anything we would like to see exist or occur: software/features, architecture, community building, economy, mining, game-theory, etc.</p>
<p>This is <a href="https://ideanote.io/blog/blue-sky-thinking" rel="noopener noreferrer">BlueSky Thinking</a>, so for purposes of this <a href="https://www.wazoku.com/blog/the-beauty-of-blue-sky-thinking/" rel="noopener noreferrer">brainstorming exercise</a>, it is the idea that matters. Artificial constraints such as deadlines, budgets, mvp, and spent-cost efforts do not exist. Practicality and present feasability are only minor obstacles. :-)</p>
<p>My own personal wishlist for Neptune software/architecture, in no particular order, are:</p>
<ul>
<li>
<p><strong>Seperate wallet from server</strong>. So a single neptune-core instance could serve multiple neptune-wallet-rpc servers. Monero does this, and it makes for a clean architecture and <a href="https://monero.stackexchange.com/questions/2922/why-is-the-monero-node-separate-from-the-wallet" rel="noopener noreferrer">smaller code/attack surface</a> for the core server and wallet. Also more suitable for use by exchanges, block explorers, etc that do not need wallet functionality.</p>
</li>
<li>
<p><strong>multi-wallet support</strong>. Some of my fav bitcoin wallets support multiple wallets and make it easy to create new wallets. Either with a new seed for each, or sharing same seed, but with a different bip32/44 path identifier. monero-wallet-rpc supports shared seed wallets with the <a href="https://www.getmonero.org/resources/developer-guides/wallet-rpc.html#create_account" rel="noopener noreferrer">new_account API</a>, so again that’s a possible model.</p>
</li>
<li>
<p><strong>strong ASIC resistance</strong>, in the form of <a href="https://github.com/tevador/RandomX" rel="noopener noreferrer">randomX POW algo</a>. again, from Monero. Or possibly equivalent dynamic programs running in triton-vm would be even cooler (tritonX?). This should also help prevent 51% attacks by existing ASIC or GPU capacity, something common to lower market-cap coins.</p>
</li>
<li>
<p><strong>SDK</strong>. let’s make neptune-core into a proper library/crate, with neptune-core executable just an app/user with very little code. (darkfi does this).</p>
</li>
<li>
<p><strong>jsonrpc interface</strong>. (already discussed)</p>
</li>
<li>
<p><strong>EVM compatibility layer</strong>. There’s a lot of EVM contracts out there and GUI apps built around them. (Infrastructure) It seems some layer1 chains don’t seem to gain traction until they provide EVM compatibility, and most do provide it.</p>
</li>
<li>
<p><strong>bip39 mnemonic support</strong>.</p>
</li>
<li>
<p><strong>light mode support</strong> in neptune-core. (already planned, i think?)</p>
</li>
<li>
<p><strong>immutable/frozen consensus layer</strong>. already discussed in another thread.</p>
</li>
<li>
<p><strong>mine tiny amounts on any device</strong>. eg mobile phone. So anyone can mine/participate. even though they might receive eg fractional satoshi equiv rewards. <em>Ideally</em> if my hash contribution is 1/100 billionth of the worldwide hashpower, then I should receive 1/100 billionth of each block reward that I mine on. The key is that the tiny rewards be <em>regular</em> to keep people participating. Also, <a href="https://en.wikipedia.org/wiki/Long_tail" rel="noopener noreferrer">the long tail</a> is key for decentralization and ossification.</p>
</li>
<li>
<p><strong>integrate p2pool by default</strong>. or something similar for decentralized mining pool/shares. This should weaken centralized pools and their capacity for 51% and potentially huge influence re eg soft-forks.</p>
</li>
<li>
<p><strong>consensus: require proof that miner (hasher) is validating</strong>. make it impossible (or too slow) to mine a block without full, local blockchain. In bitcoin miners choose centralized pools because it is <em>easy</em> and they don’t have to setup a full node. But they are not <em>validating</em> and double-checking eachother. They are only <em>hashing</em>. This greatly harms decentralization. Take away this option, and they will be happier to use something like p2pool. edit: yes this is in conflict with tiny amounts on any device, but that probably won’t happen anyway, heh. edit again: if a neptune light-mode miner can fully validate given only the current tip block + new block, then it seems this will not be a problem the way it is on bitcoin, so we just need to ensure they are actually doing that, and not able to delegate validation to pool.</p>
</li>
</ul>
<p>So what do you think of the ideas on my wishlist? And what are your ideas?</p>
<p>note: Several of these ideas are from exposure to the monero ecosystem. I don’t wish to turn neptune into monero by any means, but I do think they’ve had some nice, comparatively little-known architectural improvements over the btc ecosystem, for example.</p>
announcing Triton VM v0.37.0jfs2024-02-152024-02-1516
<p><a href="https://github.com/TritonVM/triton-vm/releases/tag/v0.37.0" rel="noopener noreferrer">Triton VM v0.37.0</a> is now live. This release is focused on improving code maintainability, library stability, and the API. As such, there are no big ’n shiny changes to highlight this time around. 🙂</p>
<h1>Full Changelog</h1>
<h3>✨ Features</h3>
<ul>
<li>Provide more <code>BFieldCodec</code>-related info for <code>ProofItem</code>s (<a href="https://github.com/TritonVM/triton-vm/commit/483d9c0d" rel="noopener noreferrer">483d9c0d</a>)</li>
<li><em>(tui)</em> Enable scrolling in memory widget (<a href="https://github.com/TritonVM/triton-vm/commit/96e2eaca" rel="noopener noreferrer">96e2eaca</a>)</li>
<li>Provide Fiat-Shamir heuristic related info <code>ProofItemVariant</code>s (<a href="https://github.com/TritonVM/triton-vm/commit/02de19ff" rel="noopener noreferrer">02de19ff</a>)</li>
<li>Simplify parsing of proof item’s payload type (<a href="https://github.com/TritonVM/triton-vm/commit/5baeeaeb" rel="noopener noreferrer">5baeeaeb</a>)</li>
<li><em>(lint)</em> Warn if underscore bindings are being used (<a href="https://github.com/TritonVM/triton-vm/commit/8ab457a6" rel="noopener noreferrer">8ab457a6</a>)</li>
<li>(!) Return <code>Err(_)</code>, don’t <code>panic!</code>, on unsupported root of unity (<a href="https://github.com/TritonVM/triton-vm/commit/60289eb5" rel="noopener noreferrer">60289eb5</a>)</li>
<li>Simplify constructing <code>Claim</code>s (<a href="https://github.com/TritonVM/triton-vm/commit/31694222" rel="noopener noreferrer">31694222</a>)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li><em>(test)</em> Remove failure-triggering & superfluous <code>as</code> cast (<a href="https://github.com/TritonVM/triton-vm/commit/d8b34e01" rel="noopener noreferrer">d8b34e01</a>)</li>
<li><em>(tui)</em> Send key, mouse, and paste events only to active component (<a href="https://github.com/TritonVM/triton-vm/commit/74e42d35" rel="noopener noreferrer">74e42d35</a>)</li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li>Exemplify usage of Triton VM in <code>examples</code> directory (<a href="https://github.com/TritonVM/triton-vm/commit/6e4f8f0e" rel="noopener noreferrer">6e4f8f0e</a>)</li>
<li>Update readme to point at examples folder (<a href="https://github.com/TritonVM/triton-vm/commit/2c989b3a" rel="noopener noreferrer">2c989b3a</a>)</li>
<li>Update readme of constraint evaluation generator (<a href="https://github.com/TritonVM/triton-vm/commit/fa987f38" rel="noopener noreferrer">fa987f38</a>)</li>
</ul>
<h3>⚙️ Miscellaneous</h3>
<ul>
<li><em>(test)</em> Use iterator transform instead of explicit loop (<a href="https://github.com/TritonVM/triton-vm/commit/fc8b9d20" rel="noopener noreferrer">fc8b9d20</a>)</li>
<li>In CI, check documentation builds free of warnings (<a href="https://github.com/TritonVM/triton-vm/commit/bf540685" rel="noopener noreferrer">bf540685</a>)</li>
<li>Run <em>all</em> tests in CI (<a href="https://github.com/TritonVM/triton-vm/commit/d6e99ccc" rel="noopener noreferrer">d6e99ccc</a>)</li>
<li>Use <code>From</code> (not <code>as</code>) for lossless conversion (<a href="https://github.com/TritonVM/triton-vm/commit/4e8b28b7" rel="noopener noreferrer">4e8b28b7</a>)</li>
<li>Enable additional lints (<a href="https://github.com/TritonVM/triton-vm/commit/c309d759" rel="noopener noreferrer">c309d759</a>)</li>
<li>Don’t call <code>Default::default()</code> (<a href="https://github.com/TritonVM/triton-vm/commit/cb73d220" rel="noopener noreferrer">cb73d220</a>)</li>
<li>Avoid explicit <code>.(into_)iter</code> for loops (<a href="https://github.com/TritonVM/triton-vm/commit/02018af5" rel="noopener noreferrer">02018af5</a>)</li>
<li>Name all <code>clone()</code>s explicitly (<a href="https://github.com/TritonVM/triton-vm/commit/cd2e503e" rel="noopener noreferrer">cd2e503e</a>)</li>
<li>Favor <code>String::new()</code> over <code>"".into()</code> (<a href="https://github.com/TritonVM/triton-vm/commit/4650087b" rel="noopener noreferrer">4650087b</a>)</li>
<li>Deprecate aliases <code>StarkHasher</code>, <code>MTMaker</code> (<a href="https://github.com/TritonVM/triton-vm/commit/f9f0e288" rel="noopener noreferrer">f9f0e288</a>)</li>
<li>Avoid manually set inclusive range bounds (<a href="https://github.com/TritonVM/triton-vm/commit/d7b5f2c6" rel="noopener noreferrer">d7b5f2c6</a>)</li>
<li>Simplify construction of some circuits (<a href="https://github.com/TritonVM/triton-vm/commit/56d1bf0e" rel="noopener noreferrer">56d1bf0e</a>)</li>
<li>Update dependency <code>twenty-first</code> (<a href="https://github.com/TritonVM/triton-vm/commit/49b23419" rel="noopener noreferrer">49b23419</a>)</li>
</ul>
<h3>♻️ Refactor</h3>
<ul>
<li><em>(test)</em> More rigorously use <code>proptest</code> framework (<a href="https://github.com/TritonVM/triton-vm/commit/a27ca6d4" rel="noopener noreferrer">a27ca6d4</a>)</li>
<li>(!) Communicate possible FRI setup failures with <code>Result</code> (<a href="https://github.com/TritonVM/triton-vm/commit/3fe35ad1" rel="noopener noreferrer">3fe35ad1</a>)</li>
<li>(!) Communicate possible STARK proving failures with <code>Result</code> (<a href="https://github.com/TritonVM/triton-vm/commit/5613f194" rel="noopener noreferrer">5613f194</a>)</li>
<li>(!) Expose public (re-)exports via <code>triton_vm::prelude::*</code> (<a href="https://github.com/TritonVM/triton-vm/commit/0bb30d84" rel="noopener noreferrer">0bb30d84</a>)</li>
<li>Simplify <code>use</code>s through prelude of dependency <code>twenty-first</code> (<a href="https://github.com/TritonVM/triton-vm/commit/75da9a17" rel="noopener noreferrer">75da9a17</a>)</li>
<li>De-duplicate code for <code>ProofItem</code> (<a href="https://github.com/TritonVM/triton-vm/commit/a227131c" rel="noopener noreferrer">a227131c</a>)</li>
<li>Simplify TUI layout construction with new <code>ratatui</code> features (<a href="https://github.com/TritonVM/triton-vm/commit/0054597d" rel="noopener noreferrer">0054597d</a>)</li>
<li>(!) Make lengths of master tables’ rows compile-time known (<a href="https://github.com/TritonVM/triton-vm/commit/e52f4cf0" rel="noopener noreferrer">e52f4cf0</a>)</li>
<li>(!) Integrate <code>StarkParameters</code> into <code>Stark</code> (<a href="https://github.com/TritonVM/triton-vm/commit/0c5edc73" rel="noopener noreferrer">0c5edc73</a>)</li>
<li><em>(test)</em> Improve test names (<a href="https://github.com/TritonVM/triton-vm/commit/6caa0e1a" rel="noopener noreferrer">6caa0e1a</a>)</li>
<li>(!) Make <code>VMState</code>’s <code>sponge</code> a <code>Tip5</code> (<a href="https://github.com/TritonVM/triton-vm/commit/d7b8a3f7" rel="noopener noreferrer">d7b8a3f7</a>)</li>
</ul>
Considerations regarding RandomXaszepieniec2024-01-232024-01-2315
<p>In <a href="https://talk.neptune.cash/post/1/13" rel="noopener noreferrer">another thread</a>, <a href="https://talk.neptune.cash/user/8" rel="noopener noreferrer">danda</a> suggested using <a href="https://github.com/tevador/RandomX" rel="noopener noreferrer">RandomX</a>, the proof-of-work hash function used by Monero:</p>
<blockquote>
<p>strong ASIC resistance, in the form of randomX POW algo. again, from Monero. Or possibly equivalent dynamic programs running in triton-vm would be even cooler (tritonX?). This should also help prevent 51% attacks by existing ASIC or GPU capacity, something common to lower market-cap coins.</p>
</blockquote>
<p>One of the main selling points for RandomX is its ASIC-resistance. Bitmain offers RandomX mining devices. Some speculate that these devices are ASICs, but others speculate that they are really just clusters of CPUs. Either way: an interesting development. <a href="https://www.reddit.com/r/MoneroMining/comments/162ud4p/randomx_asic_announced/?rdt=55359" rel="noopener noreferrer">1</a></p>
<p>Up until now the design for proof-of-work in Neptune is as follows:</p>
<ul>
<li>Mining consists of two steps.</li>
<li>In the first step you produce a <a href="https://triton-vm.org" rel="noopener noreferrer">TritonVM</a> STARK proof of the correctness of the previous block.</li>
<li>In the second step you guess a nonce, which is a field in the header, such that the block’s <a href="https://eprint.iacr.org/2023/107" rel="noopener noreferrer">Tip5</a> hash digest is less than a target threshold.</li>
<li>Mining pools should be feasible in which the operator produces the proof of the first step and in which the subscribers contribute hashing power of the second step. By subscribing to a mining pool, users of low-end devices can make every last joule of energy count.</li>
</ul>
<p>We are not necessarily revising that architecture. I just want to have all the arguments articulated and laid out. Or even arguments and idle thoughts that are neither pro nor con but supply useful context. Feel free to contribute.</p>
<p><strong>ASIC-resistance democratizes mining.</strong> By “democratize” I mean make accessible to a wide range of people. This benefits the project because it puts coins into the hands of individuals who don’t necessarily (a) have a mining rig or (b) want to get them from an exchange.</p>
<p><strong>ASIC-resistant hash functions are not STARK-friendly.</strong> In order to mine the next block, you need to prove that whatever hash puzzle was solved for the last block. If that hash puzzle involves RandomX, the overhead of proving its correct evaluation is significant. This dynamic benefits whoever has the more powerful proving hardware. If it is a STARK-friendly hash function, then it does not have the profile of an ASIC-resistant one.</p>
<p><strong>ASICs stabilize the mining ecosystem.</strong> Manufacturers and users of mining ASICs make a capital commitment to mining a particular coin and they cannot use those ASICs for other purposes. </p>
<p><strong>ASIC-resistant hash functions benefit large CPUs with plenty of memory.</strong> In particular, the issue is that the hardware that computes the function faster has a systematic advantage over hardware that computes is slower. This is always true, but especially exacerbated by hash functions using random code and lots of memory. Ideally, the hash function treats large CPUs the same as small ones and only the number of joules consumed counts.</p>
Alphanet version 5sword_smith2024-01-152024-01-1514
<p>The next version of our testnet is up and running</p>
<p>The most notable UI changes are:</p>
<ul>
<li>Support for seed-phrase backup of wallet seed, BIP39</li>
<li>Much faster responses to request needed for the dashboard</li>
<li>Faster proof generation from upgrade to Triton-VM v0.36</li>
<li>New wallet format, meaning you need a new <code>wallet.dat</code></li>
</ul>
<p>Migrating on Linux:
To migrate on Linux, please stop your current node:</p>
<ul>
<li>Get the latest version of <code>neptune-core</code> by e.g. running <code>git pull</code></li>
<li>Run <code>./scripts/linux/alphanet-restart</code> to clear blockchain data</li>
<li>Run <code>cargo install --path .</code> </li>
</ul>
<p>For this particular update, you should also move your <code>wallet.dat</code> file, as the software needs to generate a new one, as the format has changed.</p>
<p>On Windows the application defaults to storing its data in <code>C:\Users\<user>\AppData\Roaming\neptune\neptune\</code>.</p>
<p>Internally this version enables faster proof generation due to the <a href="https://talk.neptune.cash/post/1/12" rel="noopener noreferrer">new version of Triton VM</a>, and a change from a Rust implementation of leveldb to the C++ implementation that the Bitcoin Core client also uses.</p>
<p>Full changelog can be found <a href="https://github.com/Neptune-Crypto/neptune-core/commit/4b61dff6d5dca47deeeb3567183043e309a1c6dc" rel="noopener noreferrer">here</a>.</p>
announcing Triton VM v0.36.0jfs2023-12-222023-12-2212
<p><a href="https://github.com/TritonVM/triton-vm/releases/tag/v0.36.0" rel="noopener noreferrer">Triton VM v0.36.0</a> is now live. The main highlights are:</p>
<h1>More Ergonomic and Faster Instructions</h1>
<p>Previously, Triton VM’s stack could grow or shrink by at most one element per instruction. As of this version, this limitation is lifted. Many instructions can now change the stack size by up to five elements at once. This greatly improves speed: for example, all input / output instructions, whether for memory or one of the standard streams, can now process batches of size up to five. It also increases ergonomics: instructions operating on multiple extension field elements such as <code>xxadd</code> now remove both operands from the stack, leaving only the result.</p>
<p>These are just a some examples. The updated instruction set architecture can be found in the <a href="https://triton-vm.org/spec/instructions.html" rel="noopener noreferrer">specification</a>.</p>
<h1>Triton TUI</h1>
<p><a href="https://github.com/TritonVM/triton-vm/tree/master/triton-tui" rel="noopener noreferrer">Triton TUI</a> is a Terminal User Interface for Triton VM. It greatly simplifies running programs written in Triton assembly, and helps with debugging those programs. To get started, install it via <code>cargo install triton-tui</code>, then check out the <a href="https://github.com/TritonVM/triton-vm/blob/master/triton-tui/examples/program.tasm" rel="noopener noreferrer">example program</a>.</p>
<p>The main features of Triton TUI are:</p>
<ul>
<li>visualization of the state Triton VM is currently in</li>
<li>step debugging similar to <code>gdb</code> – continue to the next breakpoint, step forward one instruction, step out of current function, etc.</li>
<li>annotations – assign names and types to stack and memory elements and have them tracked as Triton VM runs</li>
<li>RAM inspection – navigate freely through all of memory</li>
<li>hot reload & reset – change your program on disk and reload it in the same session of Triton TUI</li>
<li>adaptive interface – you choose which information to show</li>
</ul>
<h1>Improved Error Reporting</h1>
<p>Triton VM now reports any failure through custom errors. This allows better error handling downstream. Examples of such errors are failing asserts of the program executed by Triton VM, or the attempt to divide by 0, among many others. Whenever applicable, Triton VM now also returns the state it was in when a crash happened.</p>
<h1>Full Changelog</h1>
<h3>✨ Features</h3>
<ul>
<li>Add benchmark for execution tracing (<a href="https://github.com/TritonVM/triton-vm/commit/11b360d6" rel="noopener noreferrer">11b360d6</a>)</li>
<li>Record opstack underflow read/write in AET (<a href="https://github.com/TritonVM/triton-vm/commit/a57ef7c3" rel="noopener noreferrer">a57ef7c3</a>)</li>
<li>Make Op Stack Table variable length (<a href="https://github.com/TritonVM/triton-vm/commit/b606dc60" rel="noopener noreferrer">b606dc60</a>)</li>
<li>(!) Instruction <code>hash</code> only puts digest on stack (<a href="https://github.com/TritonVM/triton-vm/commit/2e37fb2f" rel="noopener noreferrer">2e37fb2f</a>)</li>
<li>(!) Make instruction <code>pop</code> take an argument in range 1..=5 (<a href="https://github.com/TritonVM/triton-vm/commit/81248b90" rel="noopener noreferrer">81248b90</a>)</li>
<li>(!) Make instruction <code>divine</code> take an argument in range 1..=5 (<a href="https://github.com/TritonVM/triton-vm/commit/5bf3541a" rel="noopener noreferrer">5bf3541a</a>)</li>
<li>(!) Instruction <code>divine_sibling</code> pushes divined digest onto stack (<a href="https://github.com/TritonVM/triton-vm/commit/4602fad8" rel="noopener noreferrer">4602fad8</a>)</li>
<li>Sponge instructions change stack size (<a href="https://github.com/TritonVM/triton-vm/commit/0fac3fc8" rel="noopener noreferrer">0fac3fc8</a>)</li>
<li>Extension field instructions change stack size (<a href="https://github.com/TritonVM/triton-vm/commit/f0b3ab8f" rel="noopener noreferrer">f0b3ab8f</a>)</li>
<li>(!) Make instruction <code>read_io</code> take an argument in range 1..=5 (<a href="https://github.com/TritonVM/triton-vm/commit/e138f0a0" rel="noopener noreferrer">e138f0a0</a>)</li>
<li>(!) Make instruction <code>write_io</code> take an argument in range 1..=5 (<a href="https://github.com/TritonVM/triton-vm/commit/b8e5f978" rel="noopener noreferrer">b8e5f978</a>)</li>
<li>Instruction <code>assert_vector</code> shrinks stack by 5 elements (<a href="https://github.com/TritonVM/triton-vm/commit/6a0e19cc" rel="noopener noreferrer">6a0e19cc</a>)</li>
<li>(!) Make memory instructions take an argument in range 1..=5 (<a href="https://github.com/TritonVM/triton-vm/commit/8ef132af" rel="noopener noreferrer">8ef132af</a>)</li>
<li>Add benchmark just executing a Triton VM program (<a href="https://github.com/TritonVM/triton-vm/commit/8301d5db" rel="noopener noreferrer">8301d5db</a>)</li>
<li>(!) Improve error reporting (<a href="https://github.com/TritonVM/triton-vm/commit/48ee1099" rel="noopener noreferrer">48ee1099</a>)</li>
<li>Only change VM state if instruction execution will work (<a href="https://github.com/TritonVM/triton-vm/commit/d7fbb3fd" rel="noopener noreferrer">d7fbb3fd</a>)</li>
<li>Add <code>triton-tui</code>, a TUI for debugging programs in Triton assembly (<a href="https://github.com/TritonVM/triton-vm/commit/d0d79bce" rel="noopener noreferrer">d0d79bce</a>)</li>
<li>Allow installing triton-tui as a binary (<a href="https://github.com/TritonVM/triton-vm/commit/047bed9b" rel="noopener noreferrer">047bed9b</a>)</li>
<li>(de)serialize <code>VMState</code> (<a href="https://github.com/TritonVM/triton-vm/commit/8df0723c" rel="noopener noreferrer">8df0723c</a>)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>Crash VM when executing <code>swap 0</code> (<a href="https://github.com/TritonVM/triton-vm/commit/215f2ede" rel="noopener noreferrer">215f2ede</a>)</li>
<li>Overflowing subtractions when accessing op stack underflow (<a href="https://github.com/TritonVM/triton-vm/commit/2aa72e77" rel="noopener noreferrer">2aa72e77</a>)</li>
<li><em>(doc)</em> Correct explanations for previous designs (<a href="https://github.com/TritonVM/triton-vm/commit/4bbc2d2a" rel="noopener noreferrer">4bbc2d2a</a>)</li>
<li>Account for op stack table length dominating the AET (<a href="https://github.com/TritonVM/triton-vm/commit/f465f756" rel="noopener noreferrer">f465f756</a>)</li>
<li>Correct calculation of total available memory in Triton VM (<a href="https://github.com/TritonVM/triton-vm/commit/18af2b40" rel="noopener noreferrer">18af2b40</a>)</li>
<li>Fail Sponge instructions if Sponge state is uninitialized (<a href="https://github.com/TritonVM/triton-vm/commit/881b6c0d" rel="noopener noreferrer">881b6c0d</a>)</li>
</ul>
<h3>⚡️ Performance</h3>
<ul>
<li>Remove redundant constraint preventing op stack underflow (<a href="https://github.com/TritonVM/triton-vm/commit/6215c108" rel="noopener noreferrer">6215c108</a>)</li>
<li>Use instruction’s fast-fail for error reporting, not cloning (<a href="https://github.com/TritonVM/triton-vm/commit/08bbc41f" rel="noopener noreferrer">08bbc41f</a>)</li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li>Add TIP-0008 “Continuations” (<a href="https://github.com/TritonVM/triton-vm/commit/4b38d01b" rel="noopener noreferrer">4b38d01b</a>)</li>
<li>Consistently use a space in “op stack” and “jump stack” (<a href="https://github.com/TritonVM/triton-vm/commit/eb8dc840" rel="noopener noreferrer">eb8dc840</a>)</li>
<li>Delete out-of-date cheat sheet (<a href="https://github.com/TritonVM/triton-vm/commit/69aac2dc" rel="noopener noreferrer">69aac2dc</a>)</li>
<li>Prose and example for Op Stack Table behavior (<a href="https://github.com/TritonVM/triton-vm/commit/db01232f" rel="noopener noreferrer">db01232f</a>)</li>
<li>Update AET relations diagram (<a href="https://github.com/TritonVM/triton-vm/commit/f177d658" rel="noopener noreferrer">f177d658</a>)</li>
<li>Op Stack Table padding (<a href="https://github.com/TritonVM/triton-vm/commit/ad09b8d2" rel="noopener noreferrer">ad09b8d2</a>)</li>
<li>Update Op Stack Table’s AIR (<a href="https://github.com/TritonVM/triton-vm/commit/3fb003b6" rel="noopener noreferrer">3fb003b6</a>)</li>
<li>Update Processor Table’s AET and AIR (<a href="https://github.com/TritonVM/triton-vm/commit/e59eedeb" rel="noopener noreferrer">e59eedeb</a>)</li>
<li>Reflect changes to instructions, constraints, and mechanics (<a href="https://github.com/TritonVM/triton-vm/commit/ccf123b8" rel="noopener noreferrer">ccf123b8</a>)</li>
<li>Exemplify error handling (<a href="https://github.com/TritonVM/triton-vm/commit/90151d6c" rel="noopener noreferrer">90151d6c</a>)</li>
<li>Add changelog (<a href="https://github.com/TritonVM/triton-vm/commit/4d1fc2c0" rel="noopener noreferrer">4d1fc2c0</a>)</li>
</ul>
<h3>⚙️ Miscellaneous</h3>
<ul>
<li>Simplify <code>use</code>s (<a href="https://github.com/TritonVM/triton-vm/commit/51878fae" rel="noopener noreferrer">51878fae</a>)</li>
<li><em>(test)</em> Remove unnecessary paths (<a href="https://github.com/TritonVM/triton-vm/commit/4323b202" rel="noopener noreferrer">4323b202</a>)</li>
<li><code>read_mem</code> starts reading at current address (<a href="https://github.com/TritonVM/triton-vm/commit/7faad183" rel="noopener noreferrer">7faad183</a>)</li>
<li>(!) Rename & change debugging methods of <code>Program</code> (<a href="https://github.com/TritonVM/triton-vm/commit/abd17904" rel="noopener noreferrer">abd17904</a>)</li>
<li>Fix spelling of <code>collinear</code> (not <code>colinear</code>) (<a href="https://github.com/TritonVM/triton-vm/commit/2e9ebd7c" rel="noopener noreferrer">2e9ebd7c</a>)</li>
<li>Improve changelog generation configuration (<a href="https://github.com/TritonVM/triton-vm/commit/9e3432f3" rel="noopener noreferrer">9e3432f3</a>)</li>
<li>(!) Remove <code>Default</code> derivation from <code>Program</code> (<a href="https://github.com/TritonVM/triton-vm/commit/868f49d9" rel="noopener noreferrer">868f49d9</a>)</li>
<li>Allow tracing program execution from a given starting state (<a href="https://github.com/TritonVM/triton-vm/commit/5f702d47" rel="noopener noreferrer">5f702d47</a>)</li>
<li>Upgrade dependency <code>cargo-tarpaulin</code> (<a href="https://github.com/TritonVM/triton-vm/commit/560f2555" rel="noopener noreferrer">560f2555</a>)</li>
</ul>
<h3>♻️ Refactor</h3>
<ul>
<li><em>(examples)</em> Return program, not instructions (<a href="https://github.com/TritonVM/triton-vm/commit/55c731ed" rel="noopener noreferrer">55c731ed</a>)</li>
<li>Improve API of <code>VMProfiler</code> (<a href="https://github.com/TritonVM/triton-vm/commit/202cb74b" rel="noopener noreferrer">202cb74b</a>)</li>
<li><em>(vm)</em> Rename <code>ramp</code> to <code>ram_pointer</code> (<a href="https://github.com/TritonVM/triton-vm/commit/612714d0" rel="noopener noreferrer">612714d0</a>)</li>
<li><em>(processor_table)</em> Remove never-triggered panics (<a href="https://github.com/TritonVM/triton-vm/commit/6ced006a" rel="noopener noreferrer">6ced006a</a>)</li>
<li><em>(processor_table)</em> Remove unused struct <code>ExtProcessorTraceRow</code> (<a href="https://github.com/TritonVM/triton-vm/commit/d39230f2" rel="noopener noreferrer">d39230f2</a>)</li>
<li><em>(test)</em> Use crate <code>test-strategy</code> (<a href="https://github.com/TritonVM/triton-vm/commit/01e5e229" rel="noopener noreferrer">01e5e229</a>)</li>
<li><em>(test)</em> Improve testing instruction’s transition constraints (<a href="https://github.com/TritonVM/triton-vm/commit/77948e1a" rel="noopener noreferrer">77948e1a</a>)</li>
<li><em>(op_stack)</em> Simplify recording of op stack underflow I/O calls (<a href="https://github.com/TritonVM/triton-vm/commit/f3803676" rel="noopener noreferrer">f3803676</a>)</li>
<li>Turn python script for computing opcodes into a rust test (<a href="https://github.com/TritonVM/triton-vm/commit/ddb220f2" rel="noopener noreferrer">ddb220f2</a>)</li>
<li><em>(test)</em> Also test transition constraints on extension table (<a href="https://github.com/TritonVM/triton-vm/commit/4bd9cf16" rel="noopener noreferrer">4bd9cf16</a>)</li>
<li><em>(test)</em> Split test program enumeration into individual tests (<a href="https://github.com/TritonVM/triton-vm/commit/cc79cfad" rel="noopener noreferrer">cc79cfad</a>)</li>
<li>Abstract over legal argument range for various instructions (<a href="https://github.com/TritonVM/triton-vm/commit/a76097e9" rel="noopener noreferrer">a76097e9</a>)</li>
<li>(!) On success, <code>Stark::verify</code> returns <code>Ok(())</code>, not <code>Ok(true)</code> (<a href="https://github.com/TritonVM/triton-vm/commit/9d3a7065" rel="noopener noreferrer">9d3a7065</a>)</li>
<li>(!) Remove <code>terminal_state</code>, allow running a VM state instead (<a href="https://github.com/TritonVM/triton-vm/commit/fbd58f1c" rel="noopener noreferrer">fbd58f1c</a>)</li>
<li>Simplify indexing into <code>OpStack</code> (<a href="https://github.com/TritonVM/triton-vm/commit/4b31b2fe" rel="noopener noreferrer">4b31b2fe</a>)</li>
</ul>
<h3>✅ Testing</h3>
<ul>
<li>Op stack table row sorting (<a href="https://github.com/TritonVM/triton-vm/commit/7418502b" rel="noopener noreferrer">7418502b</a>)</li>
<li>Factor for running product with Op Stack Table never panics (<a href="https://github.com/TritonVM/triton-vm/commit/224e7923" rel="noopener noreferrer">224e7923</a>)</li>
<li>Turn extension field instruction tests into property tests (<a href="https://github.com/TritonVM/triton-vm/commit/067d0053" rel="noopener noreferrer">067d0053</a>)</li>
<li>Turn <code>get_colinear_y</code> into a property test (<a href="https://github.com/TritonVM/triton-vm/commit/39bd4668" rel="noopener noreferrer">39bd4668</a>)</li>
<li>Use <code>proptest</code>, not ad-hoc prop tests, for program parsing tests (<a href="https://github.com/TritonVM/triton-vm/commit/d2acbbf8" rel="noopener noreferrer">d2acbbf8</a>)</li>
<li>Delete some ignored, obsolete tests (<a href="https://github.com/TritonVM/triton-vm/commit/8deb268a" rel="noopener noreferrer">8deb268a</a>)</li>
<li>Instructions fail before they modify the state (<a href="https://github.com/TritonVM/triton-vm/commit/c680fab2" rel="noopener noreferrer">c680fab2</a>)</li>
</ul>
Neptune should get rid of any form of dev tax or pre-mine to pass the Howey testi2pZ7812HTZV692023-11-082023-11-0811
<p>We all know why Monero worked so well.</p>
<p>Whether its any pre-mine coin or any dev tax we all know how the free market and regulators will respond.</p>