<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The QIE team]]></title><description><![CDATA[The QIE team]]></description><link>https://qieteam.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 04 Nov 2026 01:29:13 GMT</lastBuildDate><atom:link href="https://qieteam.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Deploy and verify your first Solidity contract on QIE testnet in 15 minutes]]></title><description><![CDATA[Disclosure: this article is written by the QIE team. Every command below was run end to end on QIE testnet (chain ID 1983) on 20 Oct 2026. You have a…]]></description><link>https://qieteam.hashnode.dev/deploy-and-verify-your-first-solidity-contract-on-qie-testnet-in-15-minutes</link><guid isPermaLink="true">https://qieteam.hashnode.dev/deploy-and-verify-your-first-solidity-contract-on-qie-testnet-in-15-minutes</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Solidity]]></category><category><![CDATA[Web3]]></category><dc:creator><![CDATA[The QIE team]]></dc:creator><pubDate>Wed, 21 Oct 2026 06:15:25 GMT</pubDate><content:encoded><![CDATA[<p><em>Disclosure: this article is written by the QIE team. Every command below was run end to end on QIE testnet (chain ID 1983) on 20 Oct 2026.</em></p>
<p>You have a contract idea and a free evening. What eats the evening is rarely the Solidity. It's finding a chain ID you can rely on, an RPC that actually answers, a faucet, and the one verifier flag that makes the explorer show your source code instead of raw bytecode.</p>
<p>This walkthrough removes that guesswork for QIE testnet. You'll write a small contract, deploy it with Foundry, verify it on the explorer and call it from the terminal. We ran every step ourselves: the example contract is live and verified at <a href="https://testnet.qie.digital/address/0x733DA66D594D6d839F8316C949d6ef0B62003E69">0x733DA66D594D6d839F8316C949d6ef0B62003E69</a>.</p>
<h2>What you'll build</h2>
<p><strong>HackathonGreeter</strong>: a contract that stores a greeting, counts how many times it changed and emits a <code>GreetingChanged</code> event on every change. Small enough to read in a minute, but it covers the whole loop: write, test, deploy, verify, interact.</p>
<h2>Prerequisites</h2>
<ul>
<li>Linux, macOS or Windows (WSL) with <code>git</code> and <code>curl</code>.</li>
<li>A self-custody EVM wallet such as QIE Wallet (browser extension) or MetaMask, with a <strong>fresh, testnet-only account</strong>. QIE Wallet is non-custodial: your keys are created and stay on your device. Never reuse an account that holds mainnet funds for development.</li>
<li>About 15 minutes.</li>
</ul>
<p>QIE testnet details (checked live):</p>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Value</th>
</tr>
</thead>
<tbody><tr>
<td>Network name</td>
<td>QIE Testnet</td>
</tr>
<tr>
<td>Chain ID</td>
<td>1983 (hex 0x7BF)</td>
</tr>
<tr>
<td>Currency symbol</td>
<td>QIE (18 decimals)</td>
</tr>
<tr>
<td>RPC</td>
<td><a href="https://rpc2testnet.qie.digital">https://rpc2testnet.qie.digital</a></td>
</tr>
<tr>
<td>Explorer (Blockscout)</td>
<td><a href="https://testnet.qie.digital">https://testnet.qie.digital</a></td>
</tr>
<tr>
<td>Faucet</td>
<td><a href="https://www.qie.digital/faucet">https://www.qie.digital/faucet</a></td>
</tr>
</tbody></table>
<p>QIE Mainnet is a different chain (ID 1990). Everything here targets testnet 1983 only.</p>
<h2>Step 1: Install Foundry</h2>
<pre><code class="language-bash">curl -L https://foundry.paradigm.xyz | bash &amp;&amp; foundryup   # once
</code></pre>
<p>We tested with forge 1.8.5.</p>
<h2>Step 2: Create the project</h2>
<pre><code class="language-bash">forge init hello-qie &amp;&amp; cd hello-qie
rm src/Counter.sol test/Counter.t.sol script/Counter.s.sol
</code></pre>
<p>Replace <code>foundry.toml</code> with the settings we deployed and verified with. Pinning <code>evm_version = "paris"</code> gives the widest EVM compatibility:</p>
<pre><code class="language-toml">[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.24"
evm_version = "paris"
optimizer = true
optimizer_runs = 200

[rpc_endpoints]
qie_testnet = "https://rpc2testnet.qie.digital"

[etherscan]
qie_testnet = { key = "verifyContract", chain = 1983, url = "https://testnet.qie.digital/api/" }
</code></pre>
<h2>Step 3: Write and test the contract</h2>
<p>Create <code>src/HackathonGreeter.sol</code>:</p>
<pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

/// @title HackathonGreeter - QIE Hackathon 3.0 quickstart example (QIE TESTNET)
/// @notice Stores a greeting, counts updates and emits an event on every change.
contract HackathonGreeter {
    string public greeting;
    uint256 public updates;
    address public immutable deployer;

    event GreetingChanged(address indexed by, uint256 indexed updateNumber, string greeting);

    constructor(string memory initialGreeting) {
        deployer = msg.sender;
        greeting = initialGreeting;
        emit GreetingChanged(msg.sender, 0, initialGreeting);
    }

    function setGreeting(string calldata newGreeting) external {
        require(bytes(newGreeting).length &gt; 0, "empty greeting");
        updates += 1;
        greeting = newGreeting;
        emit GreetingChanged(msg.sender, updates, newGreeting);
    }
}
</code></pre>
<p>Add a test in <code>test/HackathonGreeter.t.sol</code> that checks the initial greeting, the event on <code>setGreeting</code> and the revert on an empty string, then run:</p>
<pre><code class="language-bash">forge build
forge test -vv
</code></pre>
<p>Our run: <code>Suite result: ok. 3 passed; 0 failed; 0 skipped</code>.</p>
<h2>Step 4: Get testnet QIE from the faucet</h2>
<ol>
<li>Open <a href="https://www.qie.digital/faucet">https://www.qie.digital/faucet</a>.</li>
<li>Paste your testnet address (0x...) and click <strong>Send Me QIE</strong>.</li>
<li>You can claim up to 2 testnet QIE per address every 24 hours. Our deploy used 354,264 gas at 8 wei per gas, a tiny fraction of one testnet QIE.</li>
</ol>
<pre><code class="language-bash">cast balance 0xYourAddress --ether --rpc-url https://rpc2testnet.qie.digital
</code></pre>
<p>Testnet QIE has no value and exists only for testing. The faucet will never ask for a seed phrase, private key, deposit or mainnet funds.</p>
<h2>Step 5: Put your key in an encrypted keystore</h2>
<p>Don't pass a private key on the command line or put it in a <code>.env</code> file. Import your testnet-only key once into Foundry's encrypted keystore. Foundry prompts for the key and a password (nothing is echoed) and stores the encrypted file under <code>~/.foundry/keystores/</code>:</p>
<pre><code class="language-bash">cast wallet import qie-testnet-dev --interactive
cast wallet address --account qie-testnet-dev        # prints your public 0x address
</code></pre>
<p>From now on you sign with <code>--account qie-testnet-dev</code> and type only the password when Foundry asks.</p>
<h2>Step 6: Deploy</h2>
<p>Confirm the chain first, then deploy:</p>
<pre><code class="language-bash">cast chain-id --rpc-url https://rpc2testnet.qie.digital        # must print 1983

forge create src/HackathonGreeter.sol:HackathonGreeter \
  --rpc-url https://rpc2testnet.qie.digital --chain-id 1983 \
  --account qie-testnet-dev \
  --broadcast --constructor-args "Hello, QIE testnet!"
</code></pre>
<p>Real output from our run (block 9258585):</p>
<pre><code class="language-text">Deployer: 0x664eC56c09802160FCA0C0C49a5883B61DF1cD45
Deployed to: 0x733DA66D594D6d839F8316C949d6ef0B62003E69
Transaction hash: 0x86fcc150432e5ee6ce5f55397fcf8841238e45377aceb43d01906577a3d6b2f0
</code></pre>
<p>Copy your own "Deployed to" address; you need it for the next two steps.</p>
<h2>Step 7: Verify on the explorer</h2>
<p>The QIE testnet explorer runs Blockscout and accepts verification through its API. No API key needed. Swap in your address:</p>
<pre><code class="language-bash">forge verify-contract 0x733DA66D594D6d839F8316C949d6ef0B62003E69 \
  src/HackathonGreeter.sol:HackathonGreeter \
  --chain-id 1983 \
  --verifier blockscout --verifier-url https://testnet.qie.digital/api/ \
  --constructor-args $(cast abi-encode "constructor(string)" "Hello, QIE testnet!") \
  --watch
</code></pre>
<p>After a short <code>Pending in queue</code>, ours returned:</p>
<pre><code class="language-text">Details: `Pass - Verified`
Contract successfully verified
</code></pre>
<p>Open your address on <a href="https://testnet.qie.digital">https://testnet.qie.digital</a> and the Contract tab now shows readable source.</p>
<h2>Step 8: Interact with cast</h2>
<pre><code class="language-bash">cast call 0x733DA66D594D6d839F8316C949d6ef0B62003E69 "greeting()(string)" --rpc-url https://rpc2testnet.qie.digital
# "Hello, QIE testnet!"

cast send 0x733DA66D594D6d839F8316C949d6ef0B62003E69 "setGreeting(string)" "gm from yourname.qie" \
  --rpc-url https://rpc2testnet.qie.digital --account qie-testnet-dev
# status 1 (success)

cast call 0x733DA66D594D6d839F8316C949d6ef0B62003E69 "updates()(uint256)" --rpc-url https://rpc2testnet.qie.digital
# 1
</code></pre>
<p>That's the full loop: a deployed, verified contract you can read and write from the terminal.</p>
<h2>Troubleshooting</h2>
<table>
<thead>
<tr>
<th>Symptom</th>
<th>Fix</th>
</tr>
</thead>
<tbody><tr>
<td>TLS handshake EOF or timeout on an RPC</td>
<td>Switch endpoint: rpc2testnet, rpc4testnet or rpc5testnet.qie.digital all answered chain 1983 in our tests.</td>
</tr>
<tr>
<td><code>cast chain-id</code> prints 1990</td>
<td>You're on QIE Mainnet. Stop and switch to a testnet RPC.</td>
</tr>
<tr>
<td>insufficient funds for gas</td>
<td>Claim from the faucet and check with <code>cast balance</code> (2 testnet QIE per address per 24 h).</td>
</tr>
<tr>
<td>Wallet error 4902 switching to chain 1983</td>
<td>In QIE Wallet, turn on the testnet toggle in settings first.</td>
</tr>
<tr>
<td>invalid opcode / PUSH0 errors at deploy</td>
<td>Compile with <code>evm_version = "paris"</code>, as above.</td>
</tr>
<tr>
<td>Verification: bytecode mismatch</td>
<td>Use the same compiler version, optimizer runs and EVM version as your build, and identical constructor args.</td>
</tr>
<tr>
<td>Verification stuck on "Pending in queue"</td>
<td>Keep <code>--watch</code>, or run <code>forge verify-check &lt;GUID&gt; --verifier blockscout --verifier-url https://testnet.qie.digital/api/</code>.</td>
</tr>
<tr>
<td>nonce too low</td>
<td>Wait for the previous transaction to confirm (blocks are about 4 s) or check <code>cast nonce &lt;address&gt;</code>.</td>
</tr>
<tr>
<td>Foundry shows amounts in "ETH"</td>
<td>Cosmetic; on QIE testnet the native coin is testnet QIE.</td>
</tr>
</tbody></table>
<h2>Next: build something real for QIE Hackathon 3.0</h2>
<p>Testnet is where you prototype. QIE Hackathon 3.0 is where you ship. It's an online EVM hackathon with a $17K prize pool, and the site lists a mainnet deployment requirement for final projects, so use this testnet loop to get your contracts right first. Pick one of the five tracks:</p>
<ul>
<li>DeFi &amp; Financial Infrastructure</li>
<li>AI + Autonomous Agents</li>
<li>Consumer Apps &amp; Social</li>
<li>Commerce &amp; Real World</li>
<li>Developer Infrastructure &amp; Tooling</li>
</ul>
<p>Prizes as listed on the site: 1st place $5,000, 2nd $3,000, 3rd $2,000; $500 Category Excellence awards for each track; and special awards for Most Traction ($2,500), Community Choice ($1,000) and Best Student Team ($1,000). Half of each prize is paid on Dec 10, 2026 and half after three traction milestones within 90 days.</p>
<p>Projects that integrate QIE ecosystem components get bonus consideration: connect QIE Wallet (it's non-custodial, so your dApp asks the user to sign), show a QIE ID such as yourname.qie instead of a raw 0x address, or plug into QIEDEX or the QIE Oracle.</p>
<p>Your submission needs a public GitHub repo, a live demo URL, your verified contract address and your track. Before you push, check that no keys, keystore files or passwords are in the repo.</p>
<p><strong>Submit by Nov 30, 2026.</strong> Register your team here: <a href="https://hackathon.qie.digital/?utm_source=devto&amp;utm_medium=article&amp;utm_campaign=hackathon3">hackathon.qie.digital</a></p>
<p>See you on chain 1983.</p>
<p><em>The QIE team</em></p>
]]></content:encoded></item></channel></rss>