Listen and watch the latest videos from spknetwork. Hosted by 3Speak.tv. The free speech video platform on the HIVE blockchain.
https://3speak.tv/watch?v=spknetwork/fwpngroi
Hey everyone!
In case you missed it, this is the recording of the AMA that we had last Sunday.
Vote for our Witnesses:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/alrifcwx
Hello everyone!
This is the recording of today's meeting, where we discussed key updates and future plans for the SPK Drive. You will also find the latest updates on Dlux and a thorough discussion of the next steps we need to take.
We invite you to join the SPK Network Testnet. Learn more about it here:
SPK Network - Final Testnet Sprint is Live!
A special thank you to all the users who provided feedback: @actifit-3speak (@actifit), @eastmeal, and @louis88.
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/rtcpqemm
Hello everyone!
This video tutorial will guide you through the steps to participate in the SPK Network final Test Sprint. You will learn how to register your account, acquire SPK, power up SPK to get BROCA, create and manage contracts, or even encrypt your files. Follow these instructions to learn how to back up your files on the SPK Network.
Note: We will update this post with more information regarding the other steps of the SPK Network Sprint, so stay tuned on our Discord.
Below, you can find a table of contents that will be updated. We will constantly add more content, tutorials, and instructions. Stay in contact with us on the SPK Network Discord to be the first to see all the updates and new features.
SPK Drive (file-centric storage):https://drive.spk.tv/
(Instructions coming soon)
- Store a file
- Write a storage contract
- Share an encrypted file to the network
Dlux.io (contract-centric storage):https://dlux.io/
- Create a paid and free contracts
- Extend the expiration
- Encrypt a file
SPK DEX(Fixes coming soon)
- Execut a small SPK Token trade on the DEX, (Test out a Buy and a Sell and try placing and canceling orders)
Storage Nodes(Instructions coming soon)
- Run file a storage node
- Store some files from the network on either Dlux or SPK Drive System
Validators(Instructions coming soon)
- Run a validator
Governance(Instructions coming soon)
- Power up LARYNX tokens, delegate it & receive SPK, or get SPK off the DEX and power it up
- Delegate Larynx to service providers
- Use SPK to vote for validators
Create storage contracts on Dlux.io Frontend1. Register your account on the SPK Network - (0:16 - 1:00)* Visit dlux.io and log in with Hive Keychain. * Navigate to the files page here and register your account.
You can confirm this on the Dlux Files Page. Look for the "SPK" wallet button next to "NEW" and "FREE".
Alternatively, check your balance on Ecency, but note this is the mainnet, and the balance might differ.
If you don't have any SPK, follow these steps:
If purchasing is not an option, join the SPK Network Discord and request some test SPK tokens in the #request-spk channel.
Power up SPK to get BROCA - (3:14 - 3:50)* Click on the SPK wallet at Dlux Files Page.
BROCA recharges at the same rate as Resource Credits on Hive (20% every 24 hours) allowing you to store up to 575 MB a month.
Create a Paid Contract using BROCA - (3:55 - 5:22)* On Dlux Files Page, click on "NEW".
Wait for the transaction to process and the page to refresh automatically.
Upload Files to Your New Contract - (5:23- 7:24)* Once your new contract is visible, you will see the storage, status, and expiration details.
Your contract will now be active for 30 days. You can view details such as price, expiration time, size, and more in the info section.
Create a Free Contract - (7:25 - 11:05)* Go to the Dlux Files Page and click on the "FREE" icon.
If nothing happens, reload the page to see your contract for 30 days. Do not post again to avoid duplications.
Extend a Contract Expiration Date - (11:06 - 12:28)* Click on any contract and look for the "Extend" button.
Reload the page to see the updated expiration date.
Encrypt a File - (12:45 - 15:48)* Create a new contract and upload files as before (paid or free). At DLUX this currently only works with text files, other files types are planned.
These are all the steps to create contracts and store files using the Dlux.io frontend by @disregardfiat and @markegiles. Additionally, as mentioned in the video, there is another frontend by @nathansenn that is currently under development. Once it's ready, we will create a video tutorial and add it to this post. Future updates will also include instructions for advanced features such as creating a storage node, setting up a validator, voting for governance, and storing files on your own node. Stay tuned!
Here's a video by @disregardfiat with more instructions and details of how Dlux Contract system works.
https://3speak.tv/watch?v=disregardfiat/cnqfilbu
SPK Network - Final Test Sprint
Call to Action! Join the Community: Head over to the SPK Network Discord and join the #testnet-sprint channel for all the instructions. * Get Involved: Request the "Testnet Sprinter" role and enable notifications on Discord. This will ensure you receive updates and important notifications. * Get Support: If needed, request a test account and SPK tokens in the #request-spk channel. @eddiespino or @disregardfiat will assist you. * Stay Updated: Keep an eye on this blog post for constant updates. * Create and Share Content: Post your experiences on Hive social media networks (peakd.com, ecency.com, 3speak.tv, inleo.io, etc.) using the #spktestnet tag. You can also create content on web2 platforms like X, Facebook, Reddit, and YouTube and share the links in the comments of this post. * Engage and Feedback:* Provide feedback, engage with the community, comment, and test the platform rigorously. Higher participation and engagement can lead to greater rewards!
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/drnlafnx
Hey everyone!
In case you missed it, this is the recording of the AMA that we had last Sunday.
The SPK Testnet Sprint is still active, and it will run for an extra week. Check all the details here:
Vote for our Witnesses:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
Support our proposalSPK Network Funding Proposal 2023
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/vpslljyf
Hey everyone!
In this 3Speak Video, @disregardfiat introduces us to the SPK Network Testnet. The instructions shown in the video can be accessed here: https://github.com/spknetwork/trole.
Tomorrow, we are going to launch the SPK Testnet Sprint. Be prepared, there will be $2,000 HBD in prizes for valid participation. The Testnet Sprint is going to be from the 8th of March to the 22nd of March.
Vote for our Witnesses:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
Support our proposalSPK Network Funding Proposal 2023
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/xcqgqusf
This is the recording of today's meeting. Each Thursday at 9:00 AM Pacific time, we invite you to join us at these public meetings. The live meetings occur on the 3Speak Discord Server.
Our proposal has been approved! If you haven't, we invite you to read it in the link below.
SPK Network Funding Proposal 2023
Break Away Communities UpdatesUpdates by @adesojisouljay
https://3speak.tv/watch?v=threespeakvideos/ngkjecmp
3Speak Development Update - UI Improvements and Code RefactorUpdates by @juneroy1
https://3speak.tv/watch?v=threespeakvideos/ovwmoxui
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/vcgerbty
This is the recording of today's meeting. Each Thursday at 9:00 AM Pacific time, we invite you to join us at these public meetings. The live meetings occur on the 3Speak Discord Server.
Our proposal has been approved! If you haven't, we invite you to read it in the link below.
SPK Network Funding Proposal 2023
Timestamp of the meeting:* 0:50 - 10:05 - @juneroy1 shares 3Speak UI and code refactor updates. * 10:45 - 11:30 - @adesojisouljay shares a couple of screenshots of the UI for the breakaway communities onboarding page.
| | |
Check more 3Speak-related updates on the post below:3Speak Development Update - Mobile App, Refactor, Break Away Communities and more
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/fxgskldv
This is the recording of today's meeting. Each Thursday at 10:00 AM Pacific time, we invite you to join us at these public meetings. The live meetings occur on the 3Speak Discord Server.
Ongoing priorities of @threespeak and @spknetwork Teams@disregardfiat:
Check these posts for more information:
SPK Network - Steps to Run the TestnetPreliminary SPK Network Hackathon [ENG-ESP]
3Speak Refactor - Login with Google, GitHub and Discord using Magic.LinkUpdates by @juneroy1
https://3speak.tv/watch?v=threespeakvideos/jhltbynv
Break Away Communites - Account Creation & OnboardingUpdates by @igormuba:
Updates by @adesojisouljay:
New users can sign up within the frontend. They send a link to a friend, and they can pay for the account with 3 HIVE or account creation tokens.
https://3speak.tv/watch?v=threespeakvideos/xnxngmjl
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/swrgukwp
This is the recording of today's meeting. Starting next week, the time for the meetings will change. Each Thursday at 10:00 AM Pacific time, we invite you to join us on these public meetings. The live meetings occur on the 3Speak Discord Server.
Ongoing priorities of @threespeak and @spknetwork Team@nathansenn:
@disregardfiat:
3Speak and Breakaway Community Updateshttps://3speak.tv/watch?v=threespeakvideos/hanxdxye
@adesojisouljay:
@igormuba:
@vaultec:
For more information, check our previous 3Speak update.
Vote for our Witness:* https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/rtotlfuq
This is the recording of today's meeting. Starting next week, the time for the meetings will change. Each Thursday at 10:00 AM Pacific time we invite you to join us on these public meetings. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness:* https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/audzmbqh
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness:* https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/lvreumbw
This is the recording of last Thursday's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness:* https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/blzxqgnu
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness:* https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/vwscoexu
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/wsrqrfoozd
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/oorirkka
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/lgnldgjo
Hey everyone!
With this 3Speak Video & Hive post, @sagarkothari88 illustrates how to use GraphQL Queries based on Union Indexer.
SPK Network is always Open-source: * Mobile app source code + https://github.com/spknetwork/Android-app * Legacy / Current website + https://github.com/spknetwork/3speak-legacy-frontend * Legacy / Current creator studio + https://github.com/spknetwork/3speak-legacy-studio * Union Indexer + https://github.com/spknetwork/union-indexer-node
What is GraphQL? * GraphQL is a query language for APIs and a runtime for fulfilling those queries with existing data * GraphQL provides an interactive way of building the queries & play around them. * You can select the attributes/fields/properties of your choice for the response.
Why is GraphQL now on Mobile App? * The mobile app shows different feeds but is not sorted as per the curation amount. * For each video, payout info, votes, etc., values are fetched, over & over, when displayed on the screen. * This consumes internet bandwidth & you may want to avoid it if you are on mobile data. * There are other issues with the existing feed. * Feed needs to be updated. * With GraphQL, we can fix these issues & have needed data in a single request. * @sagarkothari88 is now implementing GraphQL-based feeds on 3Speak-Mobile application.
How to use GraphQL? * Please view the video to understand in detail with a live demo. * Open this link - https://union.us-02.infra.3speak.tv/api/v2/graphql * Select the feed of your choice. + Social Feed + Trending Feed
Select attributes that you need for your User Interface
Do not forget to apply this filter if you only want the data for Videos.
Hit the run button.
Ready-made GraphQL Queries for you Trending feed
``` query MyQuery { trendingFeed(spkvideo: {only: true}) { items { ... on HivePost { spkvideo stats { num_comments num_votes total_hive_reward } lang title tags permlink created_at body } } } }
```
New Videos Feed
``` query MyQuery { socialFeed(spkvideo: {only: true}) { items { ... on HivePost { spkvideo stats { num_comments num_votes total_hive_reward } lang title tags permlink created_at body } } }
```
First Uploads Feed
``` query MyQuery { socialFeed(spkvideo: {only: true, firstUpload: true}) { items { ... on HivePost { spkvideo stats { num_comments num_votes total_hive_reward } lang title tags permlink created_at body } } }
```
Related Videos
``` query MyQuery { relatedFeed(permlink: "sdltslwo", author: "leofinance") { items { ... on HivePost { spkvideo stats { num_comments num_votes total_hive_reward } lang title tags permlink created_at body } } } }
```
My Published Videos
``` query MyQuery { socialFeed( spkvideo: {only: true} feedOptions: {byCreator: {_eq: "sagarkothari88"}} ) { items { ... on HivePost { body title tags stats { num_comments num_votes total_hive_reward } spkvideo permlink lang community created_at } } } }
```
3Shorts
``` query MyQuery { socialFeed( spkvideo: {only: true, isShort: true} ) { items { ... on HivePost { body title tags stats { num_comments num_votes total_hive_reward } spkvideo permlink lang community created_at } } } }
```
Leaderboard Coming soon.
Community Details
``` query MyQuery { community(id: "hive-181335") { title about created_at images { avatar cover } roles { role title username } subscribers } }
```
Videos from a community
``` query MyQuery { community(id: "hive-181335") { title about created_at images { avatar cover } roles { role title username } subscribers trendingFeed { items { ... on HivePost { spkvideo stats { num_comments num_votes total_hive_reward } lang title tags permlink created_at body } } } } }
```
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
Important Links:
| 3Speak Linktree | SPK Network Linktree |
| 3Speak.tv | 3Speak Twitter | 3Speak Hive Blog | 3Speak Telegram | | 3Speak in Spanish | Download Android App | Download iOS App | Download Desktop App | | Join 3Speak Discord | Setup Encoder Node | Vote for SPK Network Proposal | Badge Recipients |
| | |
Vote for 3Speak as Witness - Vote for Sagarkothari88 as Witness -
https://3speak.tv/watch?v=spknetwork/bltrrirx
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/drxwcodj
Hey everyone!
In this video, you will see the recording of our latest meeting. We shared the latest SPK Proof of Access updates in this meeting or #SPoA. This is also a Call to Action to invite everyone to test our Proof of Access method.
If you want to see all the steps and a tutorial video, check the video and post below that @eddiespino prepared for us:
https://3speak.tv/watch?v=eddiespino/dzzigonc
Written post: Proof of Access Video Tutorial | 3Speak Desktop App
Steps to participate in the Call to Action: * Record a video of a Proof of Access Validation. If you don't know how to do it, check this post. * The most important thing to share is the Proof of Access validation done on spk.tv. * Share your video on Twitter and other social media like YouTube, Instagram, or TikTok. * Use #ProofOfAccess, #PoA, #SPoA as your main tags or hashtags. * Share proof under this video through a comment and also share the comment on the "#proof-of-access-feedback" channel on the 3Speak Discord Server. To do this, copy the comment link and paste it there. * Invite others to do the same.
Important Note: If you are already running the 3Speak desktop app, stop Proof of Access and start it again. This will automatically update to the latest version of Proof of Access. Also, be sure to update the 3Speak Desktop app.
Prize Pool * We still have 300 HIVE to share, and $200 HBD has been added to the pool.
If you have questions or feedback, leave them on the "#proof-of-access-feedback" channel or contact @nathansenn on Discord.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/fmwsnqps
Hey everyone!
This is the recording of the Proof of Access Party we had yesterday. We had a great demonstration by @nathansenn, where he shared the 3Speak desktop app and explained the basics of SPoA (SPK Network's Proof of Access). We also had @disregardfiat, who shared about the tokenomics side of Proof of Access and SPK Network.
Big thanks to everyone that participated, especially @jonsnow1983, @louis88, @rivalzzz, @nonsowrites, @arcange, @mcfarhat, @neopch, @taskmaster, and more!
Thanks to @theycallmedan for the moderation and @eddiespino for the recording.
We have an active Call to Action. Check these posts for more information:
Join us for the Proof of Access Party!
https://3speak.tv/watch?v=spknetwork/lkojuhzn
Proof of Access: Step By Step Video & Call to Action!
Proof of Access: A Technical Overview
This is the step-by-step video in #Spanish. Credit to @jonsnow1983.
https://3speak.tv/watch?v=jonsnow1983/ipqkawvf
Proof of Access: Atendiendo el llamado a la acción + Invitación a la fiesta Proof of Access
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/lkojuhzn
Hey everyone!
Here's @eddiespino with an important update. In this video, you will find the steps on how to Proof of Access process works using the 3Speak Desktop app and the spk.tv website. We are still working on how to make everything more smooth and faster, but it's finally ready to test.
To test it, follow these steps:
Go to settings and click Proof of Access, then click "Start Proof of Access".
Go to the new content or new video section and pin a video. To pin a video, open it and click on the "Download to IPFS Node" button.
Note: Depending on the size of the videos, they may take up to 30 or 40 minutes to sync.
After giving the videos time to sync, click on "view" and copy the CID that starts with the letter Q.
Go to http://spk.tv/.
Enter your Hive username and paste the CID you copied on the app. Example: "QmThnci6tdLRkBz1mKas4kahWNNhpPMDbHpV3mw4CBnZhF". If it's successful, you should see this:
If the proof is invalid, ensure you have pinned the video correctly and given it enough time to sync. As I've said, this will depend on the size of the video, and it can take 10, 20, or even 30 minutes.
You've done it!
Call to Action! * Record and upload a video to 3Speak.tv showing this process. * Share your feedback and any question you may have. * As you will have to give time for the pinned videos to sync, you can edit the time you are waiting. If you use OBS you can use the pause recording option. * Use the #proofofaccess and #spkknetworkk tags. * Share on Twitter and other social media. * We will be upvoting the best videos.
For more information about Proof of Access, you can read this post by @nathansenn:
Proof of Access: A Technical Overview We also invite you to check the Proof of Access Linktree: https://linktr.ee/proofofaccess
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/nswqfwxy
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/fjupxaur
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Key Articles: * HiveFest Mexico * Proof of Access Linktree
Vote for our Witness: * https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/qbdmykfi
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Today we talked about the following:
Key Articles: * https://peakd.com/hive-100039/@ragnarok.game/ui-and-development-updates
Vote for our Witness: * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/cwlouqov
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Key Articles: * https://peakd.com/threespeak/@threespeak/3speak-app-now-available-on-the-google-play-store * https://peakd.com/vsc/@vsc.network/call-to-action-setup-a-vsc-devnet-node
Vote for our Witness: * https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/vvulcugq
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Key Articles: * https://peakd.com/spk/@disregardfiat/the-broca-markets * https://peakd.com/spk/@disregardfiat/spk-poa-lottery-system * https://peakd.com/hive-181335/@disregardfiat/euxurxqe * https://peakd.com/hive-181335/@disregardfiat/qpejcymt * https://peakd.com/hive-181335/@disregardfiat/sdbzuoxd
Vote for our Witness: * https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/iblrkpes
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meetings occur on the 3Speak Discord Server.
Key Articles:* https://peakd.com/spk/@disregardfiat/whoaoaoaooo-were-half-way-there * https://peakd.com/hive-181335/@disregardfiat/oqvyyjdx
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform can earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/zpopqlac
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meeting occurs on the 3Speak Discord Server.
Key Articles:* https://peakd.com/threespeak/@threespeak/cluster-rewarding-node-setup-get-rewarded-for-pinning-3speak-videos * https://peakd.com/threespeak/@threespeak/3speak-development-update-done-and-main-ongoing-tasks * https://linktr.ee/spknetwork
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/zznhxmqq
This is the recording of today's meeting. We plan to record every week on Thursdays at 20:00 UTC, so stay tuned. The live meeting occurs on the 3Speak Discord Server.
In this meeting you can listen to @disregardfiat, @starkerz, @theycallmedan.
The meeting was recorded and uploaded by @eddiespino.
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@diregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/guwdglwd
Join us as we discuss some design choices and challenges with building multi-party transactions. We are hoping the community has every opportunity to understand and contribute feedback. For your clarity the code below is what's being referenced in the video... with some additional //comments.
/*json => from => 3spk or account with brocato => person who can upload a filebroker => account that can recieve an uploadbroca => amount of broca to place into contract*/exports.channel_open = (json, from, active, pc) => { //the contract json:payload, from:@hiveaccount, active: active key used, pc:promise chain(for contract ordering) if (active && json.to && json.broker){ var Pbroca = getPathNum(["broca", from]); //read memory to compute contract var Pproffer = getPathObj([json.contract,'proffer', from, json.to]) var Pstats = getPathObj(["stats"]) var PauthB = getPathObj(["authorities", from]) var PauthT = getPathObj(["authorities", json.to]); var PauthF = getPathObj(["authorities", json.from]); var Ptemplate = getPathObj(["template", json.contract]); Promise.all([Pbroca, Pproffer, Pstats, PauthF, PauthT, PauthB, Ptemplate]).then(mem => { var broca = mem[0], proffer = mem[1], stats = mem[2], authF = mem[3], authT = mem[4], authB = mem[5], template = mem[6], ops = [], err = '' //no log no broca? broca = broca_calc(broca, stats, json.block_num) //function is below if (typeof template.i != "string")err += `Contract doesn't exist.` if (typeof authF != 'string')err += `@${from} hasn't registered a public key. ` if (typeof authT != "string")err += `@${json.to} hasn't registered a public key. `; if (typeof authB != "string")err += `@${json.broker} hasn't registered a public key. `; if (proffer.ex)err += `This channel exists: ${proffer.ex.split(':')[1]} ` if (json.broca > broca.b || json.broca < stats.channel_min)err += `@${from} doesn't have enough BROCA to build a channel`; if (!err) { proffer.t = json.to //to proffer.f = from //from proffer.b = json.broker //broker proffer.r = parseInt(json.broca) //resource credit proffer.a = parseInt( (json.broca / stats.channel_min) * stats.channel_bytes ); proffer.s = 1 //status codes 1: exists; 2: following steps broca.b -= parseInt(json.broca); chronAssign(parseInt(json.block_num + 28800 ), { //builds a "virtual op" to process contract phase expiration block: parseInt(json.block_num + 28800 ), op: 'channel_check', from, to: json.to, c: json.contract, ensure: 1 }).then(exp_path=>{ proffer.e = exp_path ops.push({ type: "put", path: ["broca", from], data: broca, }); const msg = `@${json.to} authorized to upload ${proffer.a} bytes to @${json.broker} by @${from} for ${parseFloat(json.broca / 1000).toFixed(3)} BROCA`; ops.push({ type: "put", path: ["feed", `${json.block_num}:${json.transaction_id}`], data: msg, }); if (config.hookurl || config.status) postToDiscord(msg, `${json.block_num}:${json.transaction_id}`); ops.push({ type: "put", path: [json.contract, 'proffer', from, json.to], data: proffer, }); if (process.env.npm_lifecycle_event == "test") pc[2] = ops; store.batch(ops); }) } else { ops.push({ type: "put", path: ["feed", `${json.block_num}:${json.transaction_id}`], data: err, }); if (config.hookurl || config.status) postToDiscord(err, `${json.block_num}:${json.transaction_id}`); if (process.env.npm_lifecycle_event == "test") pc[2] = ops; store.batch(ops); // stores memory, called the next contract in the promise chain } }) } else { pc[0](pc[2]); //ignores this failed contract, processes the next contract in the block. }};exports.register_authority = (json, from, active, pc) => {//the contract json:payload, from:@hiveaccount, active: active key used, pc:promise chain(for contract ordering) if ( active && json.pubKey && typeof json.pubKey == "string" && json.pubKey.subStr(0, 3) == "STM" && json.pubKey.length == 53 ) { var ops = [{ type: "put", path: ["authorities", from], data: json.pubKey }]; store.batch(ops, pc); } else { pc[0](pc[2]); }};const broca_calc = (obj, stats, block_num) => { //broca calculation called by many contracts const last_calc = require('./helpers').Base64.toNumber(obj.t) //decode terse memory const max = require("./helpers").Base64.toNumber(obj.m); const accured = parseInt((parseFloat(stats.broca_refill) * (block_num - last_calc))/max) obj.b += accured if(obj.b > max)obj.b = max //places the current earned broca into the object, that will only be updated upon contract completion. This process saves unnecessary overhead for idle accounts. obj.t = require("./helpers").Base64.fromNumber(block_num); return obj}
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@disregardfiat
 => { //the contract json:payload, from:@hiveaccount, active: active key used, pc:promise chain(for contract ordering) var ops = [] //holds raw memory instructions if (active) { //ensures active key// memory reads var powp = getPathNum(["spow", from]), // @from's powered spk tpowp = getPathNum(["spow", "t"]), // the total powered spk dpowp = getPathObj(["spowd", from]), // @from's downpower operations pointer votebp = getPathObj(['spkVote', from]), // @from's last vote information pstats = getPathNum(['stats']) // current network parameters Promise.all([powp, tpowp, dpowp, votebp, pstats]).then((mem) => { var stats = mem[4] const DAOString = mem[3].substring(mem[3].indexOf(",")), lastVote = Base64.toNumber(mem[3].split(",")[0]) ? Base64.toNumber(mem[3].split(",")[0]) : json.block_num - parseInt(stats.spk_cycle_length), thisVote = Base64.fromNumber(json.block_num) + "," + (DAOString ? DAOString : ""), //decoding terse memory ago = json.block_num - lastVote total = mem[1], power = mem[0] downs = Object.keys(mem[2]) var effective_power = power, effective_total, aValidator = false if(stats.validators?.[from]){ //determine if @from is a validator aValidator = true var powerVoted = 0 for (block of stats.power_voted){ powerVoted += stats.power_voted[block] } power = (total - powerVoted)/20 //or number of validators } if (!power){ ops.push({ type: "put", path: ["feed", `${json.block_num}:${json.transaction_id}`], data: `@${from}| Attempted SPK vote with no voting power`, }); store.batch(ops, pc); } else if(downs.length && !aValidator){ getPathObj(['chrono', downs[0]]).then(down =>{ // additional step to recover downpower information from pointer finish(down) }) } else { finish() } function finish(down_obj) { if(down_obj?.amount){ effective_power = power - down_obj.amount } if (ago < parseFloat(stats.spk_cycle_length))effective_power = parseInt(effective_power * (ago / stats.spk_cycle_length)) else if (ago > parseFloat(stats.spk_cycle_length) && ago < stats.spk_cycle_length * 2)effective_power = effective_power* parseInt( effective_power * (1 - ((ago - stats.spk_cycle_length) / stats.spk_cycle_length) / 2) ) else if (ago >= stats.spk_cycle_length * 2)effective_power = parseInt(effective_power/2) effective_total = effective_total - effective_power const voteWeight = parseFloat(effective_power/effective_total).toFixed(8) const decayWeight = parseFloat( (effective_total - effective_power) / effective_total ).toFixed(8); //verify inputs, adjust constants if(json.spk_cycle_length < 28800)json.spk_cycle_length = 28800 if(json.spk_cycle_length > 3000000)json.spk_cycle_length = 3000000 if(json.dex_fee < 0)json.dex_fee = 0 if(json.dex_fee > 0.1)json.dex_fee = "0.1" if(json.dex_max < 0)json.dex_max = 0 if(json.dex_max > 100)json.dex_max = 100 if(json.dex_slope < 0)json.dex_slope = 0 if(json.dex_slope > 100)json.dex_slope = 100 if(json.spk_rate_lpow < 0)json.spk_rate_lpow = 0 if(json.spk_rate_lpow > stats.spk_rate_ldel)json.spk_rate_lpow = stats.spk_rate_ldel if(json.spk_rate_ldel > stats.spk_rate_lgov)json.spk_rate_lpow = stats.spk_rate_lgov if(json.spk_rate_ldel < stats.spk_rate_lpow)json.spk_rate_ldel = stats.spk_rate_lpow if(json.spk_rate_lgov > 0.1)json.spk_rate_lgov = "0.1" if(json.spk_rate_lgov < stats.spk_rate_ldel)json.spk_rate_lpow = stats.spk_rate_ldel if(json.max_coll_members > 100)json.max_coll_members = 100 if(json.max_coll_members < 15)json.max_coll_members = 15 json.max_coll_members = parseInt(json.max_coll_members) //stats.item = (json.vote * voteWeight) + (decayWeight * stats.item) stats.spk_cycle_length = (json.spk_cycle_length * voteWeight) + (decayWeight * parseFloat(stats.spk_cycle_length)) > 28800 ? parseFloat((json.spk_cycle_length * voteWeight) + (decayWeight * stats.spk_cycle_length).toFixed(6)) : 28800 stats.dex_fee = parseFloat((json.dex_fee * voteWeight) + (decayWeight * parseFloat(stats.dex_fee))).toFixed(6) stats.dex_max = parseFloat((json.dex_max * voteWeight) + (decayWeight * parseFloat(stats.dex_max))).toFixed(2) stats.dex_slope = parseFloat((json.dex_slope * voteWeight) + (decayWeight * parseFloat(stats.dex_slope))).toFixed(2) stats.spk_rate_ldel = parseFloat((json.spk_rate_ldel * voteWeight) + (decayWeight * parseFloat(stats.spk_rate_ldel))).toFixed(6) stats.spk_rate_lgov = parseFloat((json.spk_rate_lgov * voteWeight) + (decayWeight * parseFloat(stats.spk_rate_lgov))).toFixed(6) stats.spk_rate_lpow = parseFloat((json.spk_rate_lpow * voteWeight) + (decayWeight * parseFloat(stats.spk_rate_lpow))).toFixed(6) stats.max_coll_members = (json.max_coll_members * voteWeight) + (decayWeight * parseFloat(stats.max_coll_members)) < 25 ? 25 : ((json.max_coll_members * voteWeight) + (decayWeight * stats.max_coll_members) > 79 ? 79 : parseFloat((json.max_coll_members * voteWeight) + (decayWeight * stats.max_coll_members)).toFixed(6)) //useful-votes-calc if(!aValidator)stats.power_voted[stats.lastIBlock] = effective_power + (typeof stats.power_voted[stats.lastIBlock] == "number" ? stats.power_voted[stats.lastIBlock] : 0) ops.push({ type: "put", path: ["stats"], data: stats, }); ops.push({ type: "put", path: ["spkVote", from], data: thisVote, }); ops.push({ type: "put", path: ["feed", `${json.block_num}:${json.transaction_id}`], data: `@${from}| Has updated their votes.`, }); store.batch(ops, pc); } }); } else { ops.push({ type: "put", path: ["feed", `${json.block_num}:${json.transaction_id}`], data: `@${from}| Attempted SPK vote with posting key`, }); store.batch(ops, pc); }}
Thank you for participating in our development process and participating in these early stages.
Vote for our Witness:* https://vote.hive.uno/@threespeak * https://vote.hive.uno/@diregardfiat
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/wzbjmtil
Space recording with @taskmaster4450.https://twitter.com/3speakonline/status/1599123580687523840
Vote for our Witness:* https://vote.hive.uno/@threespeak
Main Image Source
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/bnsdtkbq
The SPK Claim Chain is becoming the SPK network. These changes are happening slowly to ensure the community owns this network from the beginning. Let's review.
There are three token types in our proposed ecosystem. LARYNX, SPK, and BROCA. LARYNX is the miner token with an ongoing airdrop that can be claimed monthly. SPK is the governance token that will help turn our HIVE "side-chain" or "layer 2" into a DPoS(Distributed Proof-of-Stake) layer 2. This current change being tested allows our Larynx miner stakers to earn a very small amount of SPK to build a seedling governance. At our proposed distribution rates of 0.1, 0.015(x2), and 0.01%, we will expect no more than 15,000 SPK tokens to be minted by the next release; after which these tokens will vote a top 20(and even the number 20) which will then vote for distribution and other network variables.
A few features have been added for this release so let's cover them one by one. First, log in at dlux.io's wallet
You might have a claim available (if so, actually claim it at dlux.io/dex), but you'll need to claim it on the test net to play with these TEST tokens.
The TESTLARYNX menu will allow you to power up your mining tokens. If you run a SPKCC node, the Lock Liquidity menu will also be available, earning the highest return rate.
Now that you've powered up your LARYNX tokens, you're earning the base staking reward of 0.01% APR on your powered tokens. You can earn 50% more by delegating to a network provider account. You'll both earn 0.015% on the delegated amount. In the future, we hope this encourages network providers to provide better infrastructure and services without having to finance virtual miners and provide real services.
Finally. You can see and change your delegations by clicking the magnifying glass:
We don't expect this test period to last very long. Soon we'll be earning SPK tokens! Please leave a comment with your feedback.
Consider voting for our witnesses @disregardfiat and @threespeak.
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
Posted by @eddiespino
https://3speak.tv/watch?v=spknetwork/wexlenxm
Join @starkerz and @disregardfiat in this conversation about validators and storage nodes.
Storage Contracts:
Example:
``` “QmXedNPCLxXxMrSkBjYgMaKy1uCmixiJ2LGdruLfeCsRgs”: { Broca: 1000, //remaining? Can get pretty fuzzy here depending on how Broca is rewarded Bytes: 1024000, Expires: 70000000, BrocaPerCheck: 50, Author: “author-a” Validator: “account-v”, Storage-A: “account-a”, Storage-B: “account-b”, Storage-C: “account-c”, }
```
Validator Example:
``` “account-v”: { domain: "api.val.io", self: from, strikes: 0, //what bad actions? branded: 100000, //larynx burned into account Delegated: 100000, Pingaverage: 500, delegators: { “delegator-a”: 100000 }, contracts: { “QmXedNPCLxXxMrSkBjYgMaKy1uCmixiJ2LGdruLfeCsRgs”: 70000000 }, //not sure if needed here PubKey: “STM6EUEaEywYoxpeVDX1fPDxrsyQLGTsgYf1LLDSHWwiKBdgRhGrx”, }
```
Storage Example:
``` “account-a”: { domain: "api.storage.io", strikes: 0, //what bad actions? branded: 100000, //larynx burned into account Bytes_total: 1024000000 Delegated: 100000, delegators: { “delegator-a”: 100000 }, contracts: { “QmXedNPCLxXxMrSkBjYgMaKy1uCmixiJ2LGdruLfeCsRgs”: 1024000 }, PubKey: “STM6EUEaEywYoxpeVDX1fPDxrsyQLGTsgYf1LLDSHWwiKBdgRhGrx”, }
```
Contract/functions:
Add Validator:
Builds “account-v” with larynx. Add Brand: Burns more larynx into an account, to mine for SPK
Add Storage Node:
``` Bundle: { //from validator node with new files to store “QmXedNPCLxXxMrSkBjYgMaKy1uCmixiJ2LGdruLfeCsRgs”: 1024000 “Author”: “author-a” }
Report: { Checks: { “QmXedNPCLxXxMrSkBjYgMaKy1uCmixiJ2LGdruLfeCsRgs”:{ “Storage-a”: 750, “Storage-b”: 500, “Storage-c”: OFFLINE, }, … }, OldSecret: mysecret. NewSecrets:{ A: “#mysecret” B: “#mysecret” }
```
Vote for our Witness: * https://vote.hive.uno/@disregardfiat * https://vote.hive.uno/@threespeak
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
@eddiespino
https://3speak.tv/watch?v=spknetwork/usvpezvf
We've been humming along for a few months now, it's been mostly smooth but of course there have been a couple of hiccoughs. There have been more than 50 accounts running node services which provides decentralization as well as capital to collateralize the ad-hoc multi-signature decentralized exchange. The goal of the SPK network is to facilitate decentralized storage which means we have a few stops on the way. Proposing software version 1.1.0 Here we are, for the first time, issuing some SPK tokens. The idea is to trickle out tokens to our users for governance voting so when the time comes to scale, it's not us making all the decisions. Initially we're setting our APY at a very low number so our first movers advantage will be more in the decision making and less in token accumulation.
Proposed Rates: .1% APR to node operators
.03% APR to Delegators to node operators(split between the delegator and the delegatee, 0.015% each)
.01% APR to Non-Delegators
This rate is calculated daily, and is non-compounding, based on Locked, or Powered LARYNX only.
The incentive is for our users to provide infrastructure, or to select their infrastructure providers. The low amount for the delegation makes it more profitable to provide services than to game the delegation system. The lowest amount goes toward those interested enough to stake into the ecosystem, but not much else.
Interest Those familiar with the HBD interest algorithms will find some nostalgic methods here. When an account sends SPK, powers up or delegates Larynx, or claims earnings will have their interest calculated first. The periods are based on whole days (28800 blocks). This keeps compute cycles low and makes scaling easier. The down-side is front ends will have to calculate balances.
Code Review I welcome and strongly encourage code review. I'll explain some of the biggest pieces below.
Interest Calc
``` const simpleInterest = (p, t, r) => { const amount = p * (1 + r / 365); const interest = amount - p; return parseInt(interest * t); };
```
p => principal
t => time in days
r => rate (0.01, 0.0015, 0.001)
SPK Earnings Calc
``` const reward_spk = (acc, bn) => { return new Promise((res, rej) => { const Pblock = getPathNum(["spkb", acc]); const Pstats = getPathObj(["stats"]); const Ppow = getPathNum(["pow", acc]); const Pgranted = getPathNum(["granted", acc, "t"]); const Pgranting = getPathNum(["granting", acc, "t"]); const Pgov = getPathNum(["gov", acc]); const Pspk = getPathNum(['spk', acc]) const Pspkt = getPathNum(['spk', 't']) Promise.all([Pblock, Pstats, Ppow, Pgranted, Pgranting, Pgov, Pspk, Pspkt]).then( (mem) => { var block = mem[0], diff = bn - block, stats = mem[1], pow = mem[2], granted = mem[3], granting = mem[4], gov = mem[5], spk = mem[6], spkt = mem[7], r = 0, a = 0, b = 0, c = 0, t = 0 if (!block){ store.batch( [{ type: "put", path: ["spkb", acc], data: bn}], [res, rej, 0] ); } else if(diff < 28800){ //min claim period res(r) } else { t = parseInt(diff/28800) a = simpleInterest(gov, t, stats.spk_rate_lgov) b = simpleInterest(pow, t, stats.spk_rate_lpow); c = simpleInterest( (granted + granting), t, stats.spk_rate_ldel ); const i = a + b + c if(i){ store.batch( [{type: "put", path: ["spk", acc], data: spk + i}, {type: "put", path: ["spk", "t"], data: spkt + i}, {type: "put", path: ["spkb", acc], data: bn - (diff % 28800) }], [res, rej, i] ); } else { res(0) } }
}
);
})
}
```
Here the different balances are accessed in memory interest is calculated, and the SPK balance and total SPK balance are adusted. The Interest is calculated for whole days stored as block numbers in ['spkb']
SPK Send
``
exports.spk_send = (json, from, active, pc) => {
let Pinterest = reward_spk(from, json.block_num),
Pinterest2 = reward_spk(json.to, json.block_num);
Promise.all([Pinterest, Pinterest2])
.then(interest => {
let fbalp = getPathNum(["spk", from]),
tbp = getPathNum(["spk", json.to]); //to balance promise
Promise.all([fbalp, tbp])
.then((bals) => {
let fbal = bals[0],
tbal = bals[1],
ops = [];
send = parseInt(json.amount);
if (
json.to &&
typeof json.to == "string" &&
send > 0 &&
fbal >= send &&
active &&
json.to != from
) {
//balance checks
ops.push({
type: "put",
path: ["spk", from],
data: parseInt(fbal - send),
});
ops.push({
type: "put",
path: ["spk", json.to],
data: parseInt(tbal + send),
});
let msg =@${from}| Sent @${json.to} ${parseFloat(
parseInt(json.amount) / 1000
).toFixed(3)} SPK;
if (config.hookurl || config.status)
postToDiscord(msg,${json.block_num}:${json.transaction_id});
ops.push({
type: "put",
path: ["feed",${json.block_num}:${json.transaction_id}],
data: msg,
});
} else {
ops.push({
type: "put",
path: ["feed",${json.block_num}:${json.transaction_id}],
data:@${from}| Invalid spk send operation`,
});
}
if (process.env.npm_lifecycle_event == "test") pc[2] = ops;
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
})
};
```
Here you can see the interest is calculated and rewarded before the send operation occurs. In the future this will also happen for all smart contracts that rely on SPK balance or changes to locked Larynx balances.
One concern here, if the approach to voting is space sensitive, changing SPK balances will require vote weights to be returned to the average. If votes are stored in the system the vote can be recalculated. I'm interested in hearing about clever ways to track votes with out keeping a whole accounting of them in memory.
Power Up and Delegate
``` exports.power_up = (json, from, active, pc) => { reward_spk(from, json.block_num).then(interest => { var amount = parseInt(json.amount), lpp = getPathNum(["balances", from]), tpowp = getPathNum(["pow", "t"]), powp = getPathNum(["pow", from]);
Promise.all([lpp, tpowp, powp])
.then((bals) => {
let lb = bals[0],
tpow = bals[1],
pow = bals[2],
lbal = typeof lb != "number" ? 0 : lb,
pbal = typeof pow != "number" ? 0 : pow,
ops = [];
if (amount <= lbal && active) {
ops.push({
type: "put",
path: ["balances", from],
data: lbal - amount,
});
ops.push({
type: "put",
path: ["pow", from],
data: pbal + amount,
});
ops.push({
type: "put",
path: ["pow", "t"],
data: tpow + amount,
});
const msg = `@${from}| Powered ${parseFloat(
json.amount / 1000
).toFixed(3)} ${config.TOKEN}`;
if (config.hookurl || config.status)
postToDiscord(msg, `${json.block_num}:${json.transaction_id}`);
ops.push({
type: "put",
path: ["feed", `${json.block_num}:${json.transaction_id}`],
data: msg,
});
} else {
ops.push({
type: "put",
path: ["feed", `${json.block_num}:${json.transaction_id}`],
data: `@${from}| Invalid power up`,
});
}
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
})
}
exports.power_grant = (json, from, active, pc) => {
var amount = parseInt(json.amount),
to = json.to,
Pgranting_from_total = getPathNum(["granting", from, "t"]),
Pgranting_to_from = getPathNum(["granting", from, to]),
Pgranted_to_from = getPathNum(["granted", to, from]),
Pgranted_to_total = getPathNum(["granted", to, "t"]),
Ppower = getPathNum(["pow", from]),
Pup_from = getPathObj(["up", from]),
Pdown_from = getPathObj(["down", from]),
Pup_to = getPathObj(["up", to]),
Pdown_to = getPathObj(["down", to]),
Pgov = getPathNum(['gov', to])
Pinterest = reward_spk(from, json.block_num), //interest calc before balance changes.
Pinterest2 = reward_spk(json.to, json.block_num);
Promise.all([
Ppower,
Pgranted_to_from,
Pgranted_to_total,
Pgranting_to_from,
Pgranting_from_total,
Pup_from,
Pup_to,
Pdown_from,
Pdown_to,
Pgov,
Pinterest,
Pinterest2
])
.then((mem) => {
let from_power = mem[0],
granted_to_from = mem[1],
granted_to_total = mem[2],
granting_to_from = mem[3],
granting_from_total = mem[4],
up_from = mem[5],
up_to = mem[6],
down_from = mem[7],
down_to = mem[8],
ops = [];
if (amount < from_power && amount >= 0 && active && mem[9]) { //mem[9] checks for gov balance in to account.
if (amount > granted_to_from) {
let more = amount - granted_to_from;
if (up_from.max) {
up_from.max -= more;
}
if (down_from.max) {
down_from.max -= more;
}
if (up_to.max) {
up_to.max += more;
}
if (down_to.max) {
down_to.max += more;
}
ops.push({
type: "put",
path: ["granting", from, "t"],
data: granting_from_total + more,
});
ops.push({
type: "put",
path: ["granting", from, to],
data: granting_to_from + more,
});
ops.push({
type: "put",
path: ["granted", to, from],
data: granted_to_from + more,
});
ops.push({
type: "put",
path: ["granted", to, "t"],
data: granted_to_total + more,
});
ops.push({
type: "put",
path: ["pow", from],
data: from_power - more,
}); //weeks wait? chron ops? no because of the power growth at vote
ops.push({
type: "put",
path: ["up", from],
data: up_from,
});
ops.push({
type: "put",
path: ["down", from],
data: down_from,
});
ops.push({ type: "put", path: ["up", to], data: up_to });
ops.push({
type: "put",
path: ["down", to],
data: down_to,
});
const msg = @${from}| Has granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
} else if (amount < granted_to_from) {
let less = granted_to_from - amount;
if (up_from.max) {
up_from.max += less;
}
if (down_from.max) {
down_from.max += less;
}
if (up_to.max) {
up_to.max -= less;
}
if (down_to.max) {
down_to.max -= less;
}
ops.push({
type: "put",
path: ["granting", from, "t"],
data: granting_from_total - less,
});
ops.push({
type: "put",
path: ["granting", from, to],
data: granting_to_from - less,
});
ops.push({
type: "put",
path: ["granted", to, from],
data: granted_to_from - less,
});
ops.push({
type: "put",
path: ["granted", to, "t"],
data: granted_to_total - less,
});
ops.push({
type: "put",
path: ["pow", from],
data: from_power + less,
});
ops.push({
type: "put",
path: ["up", from],
data: up_from,
});
ops.push({
type: "put",
path: ["down", from],
data: down_from,
});
ops.push({ type: "put", path: ["up", to], data: up_to });
ops.push({
type: "put",
path: ["down", to],
data: down_to,
});
const msg = @${from}| Has granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
} else {
const msg = @${from}| Has already granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
}
} else {
const msg = @${from}| Invalid delegation;
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: ["feed", ${json.block_num}:${json.transaction_id}],
data: msg,
});
}
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
}
```
The only thing new here to note is delegation are only allowed to accounts with a gov balance, which only node operating accounts can have. Removing or lowering a delegation will also calculate the SPK balance before the change. As far as I can figure there is no way to "double spend" Larynx for rewards... please check me on this, it's important.
API Stated previously front-ends will have to calculate SPK balances based on the same information, which means a little extra API is needed. This will need to be coupled with the interest rate stats and head block number.
Thank You Thank you to the community of node runners and that help me and each other run and improve this and other Hive software. I appreciate your feedback here and on our Discord Server
Vote for our Witness: * https://vote.hive.uno/@disregardfiat * https://vote.hive.uno/@threespeak
About the SPK Network: * SPK Network Light Paper: https://peakd.com/hive/@spknetwork/spk-network-light-paper * Website: https://spk.network/ * Telegram: https://t.me/spknetwork * Discord: https://discord.gg/JbhQ7dREsP
https://3speak.tv/watch?v=spknetwork/kmosaiim
We've been humming along for a few months now, it's been mostly smooth but of course there have been a couple of hiccoughs. There have been more than 50 accounts running node services which provides decentralization as well as capital to collateralize the ad-hoc multi-signature decentralized exchange. The goal of the SPK network is to facilitate decentralized storage which means we have a few stops on the way. Proposing software version 1.1.0 Here we are, for the first time, issuing some SPK tokens. The idea is to trickle out tokens to our users for governance voting so when the time comes to scale, it's not us making all the decisions. Initially we're setting our APY at a very low number so our first movers advantage will be more in the decision making and less in token accumulation.
Proposed Rates: .1% APR to node operators
.03% APR to Delegators to node operators(split between the delegator and the delegatee, 0.015% each)
.01% APR to Non-Delegators
This rate is calculated daily, and is non-compounding, based on Locked, or Powered LARYNX only.
The incentive is for our users to provide infrastructure, or to select their infrastructure providers. The low amount for the delegation makes it more profitable to provide services than to game the delegation system. The lowest amount goes toward those interested enough to stake into the ecosystem, but not much else.
Interest Those familiar with the HBD interest algorithms will find some nostalgic methods here. When an account sends SPK, powers up or delegates Larynx, or claims earnings will have their interest calculated first. The periods are based on whole days (28800 blocks). This keeps compute cycles low and makes scaling easier. The down-side is front ends will have to calculate balances.
Code Review I welcome and strongly encourage code review. I'll explain some of the biggest pieces below.
Interest Calc
``` const simpleInterest = (p, t, r) => { const amount = p * (1 + r / 365); const interest = amount - p; return parseInt(interest * t); };
```
p => principal
t => time in days
r => rate (0.01, 0.0015, 0.001)
SPK Earnings Calc
``` const reward_spk = (acc, bn) => { return new Promise((res, rej) => { const Pblock = getPathNum(["spkb", acc]); const Pstats = getPathObj(["stats"]); const Ppow = getPathNum(["pow", acc]); const Pgranted = getPathNum(["granted", acc, "t"]); const Pgranting = getPathNum(["granting", acc, "t"]); const Pgov = getPathNum(["gov", acc]); const Pspk = getPathNum(['spk', acc]) const Pspkt = getPathNum(['spk', 't']) Promise.all([Pblock, Pstats, Ppow, Pgranted, Pgranting, Pgov, Pspk, Pspkt]).then( (mem) => { var block = mem[0], diff = bn - block, stats = mem[1], pow = mem[2], granted = mem[3], granting = mem[4], gov = mem[5], spk = mem[6], spkt = mem[7], r = 0, a = 0, b = 0, c = 0, t = 0 if (!block){ store.batch( [{ type: "put", path: ["spkb", acc], data: bn}], [res, rej, 0] ); } else if(diff < 28800){ //min claim period res(r) } else { t = parseInt(diff/28800) a = simpleInterest(gov, t, stats.spk_rate_lgov) b = simpleInterest(pow, t, stats.spk_rate_lpow); c = simpleInterest( (granted + granting), t, stats.spk_rate_ldel ); const i = a + b + c if(i){ store.batch( [{type: "put", path: ["spk", acc], data: spk + i}, {type: "put", path: ["spk", "t"], data: spkt + i}, {type: "put", path: ["spkb", acc], data: bn - (diff % 28800) }], [res, rej, i] ); } else { res(0) } }
}
);
})
}
```
Here the different balances are accessed in memory interest is calculated, and the SPK balance and total SPK balance are adusted. The Interest is calculated for whole days stored as block numbers in ['spkb']
SPK Send
``
exports.spk_send = (json, from, active, pc) => {
let Pinterest = reward_spk(from, json.block_num),
Pinterest2 = reward_spk(json.to, json.block_num);
Promise.all([Pinterest, Pinterest2])
.then(interest => {
let fbalp = getPathNum(["spk", from]),
tbp = getPathNum(["spk", json.to]); //to balance promise
Promise.all([fbalp, tbp])
.then((bals) => {
let fbal = bals[0],
tbal = bals[1],
ops = [];
send = parseInt(json.amount);
if (
json.to &&
typeof json.to == "string" &&
send > 0 &&
fbal >= send &&
active &&
json.to != from
) {
//balance checks
ops.push({
type: "put",
path: ["spk", from],
data: parseInt(fbal - send),
});
ops.push({
type: "put",
path: ["spk", json.to],
data: parseInt(tbal + send),
});
let msg =@${from}| Sent @${json.to} ${parseFloat(
parseInt(json.amount) / 1000
).toFixed(3)} SPK;
if (config.hookurl || config.status)
postToDiscord(msg,${json.block_num}:${json.transaction_id});
ops.push({
type: "put",
path: ["feed",${json.block_num}:${json.transaction_id}],
data: msg,
});
} else {
ops.push({
type: "put",
path: ["feed",${json.block_num}:${json.transaction_id}],
data:@${from}| Invalid spk send operation`,
});
}
if (process.env.npm_lifecycle_event == "test") pc[2] = ops;
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
})
};
```
Here you can see the interest is calculated and rewarded before the send operation occurs. In the future this will also happen for all smart contracts that rely on SPK balance or changes to locked Larynx balances.
One concern here, if the approach to voting is space sensitive, changing SPK balances will require vote weights to be returned to the average. If votes are stored in the system the vote can be recalculated. I'm interested in hearing about clever ways to track votes with out keeping a whole accounting of them in memory.
Power Up and Delegate
``` exports.power_up = (json, from, active, pc) => { reward_spk(from, json.block_num).then(interest => { var amount = parseInt(json.amount), lpp = getPathNum(["balances", from]), tpowp = getPathNum(["pow", "t"]), powp = getPathNum(["pow", from]);
Promise.all([lpp, tpowp, powp])
.then((bals) => {
let lb = bals[0],
tpow = bals[1],
pow = bals[2],
lbal = typeof lb != "number" ? 0 : lb,
pbal = typeof pow != "number" ? 0 : pow,
ops = [];
if (amount <= lbal && active) {
ops.push({
type: "put",
path: ["balances", from],
data: lbal - amount,
});
ops.push({
type: "put",
path: ["pow", from],
data: pbal + amount,
});
ops.push({
type: "put",
path: ["pow", "t"],
data: tpow + amount,
});
const msg = `@${from}| Powered ${parseFloat(
json.amount / 1000
).toFixed(3)} ${config.TOKEN}`;
if (config.hookurl || config.status)
postToDiscord(msg, `${json.block_num}:${json.transaction_id}`);
ops.push({
type: "put",
path: ["feed", `${json.block_num}:${json.transaction_id}`],
data: msg,
});
} else {
ops.push({
type: "put",
path: ["feed", `${json.block_num}:${json.transaction_id}`],
data: `@${from}| Invalid power up`,
});
}
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
})
}
exports.power_grant = (json, from, active, pc) => {
var amount = parseInt(json.amount),
to = json.to,
Pgranting_from_total = getPathNum(["granting", from, "t"]),
Pgranting_to_from = getPathNum(["granting", from, to]),
Pgranted_to_from = getPathNum(["granted", to, from]),
Pgranted_to_total = getPathNum(["granted", to, "t"]),
Ppower = getPathNum(["pow", from]),
Pup_from = getPathObj(["up", from]),
Pdown_from = getPathObj(["down", from]),
Pup_to = getPathObj(["up", to]),
Pdown_to = getPathObj(["down", to]),
Pgov = getPathNum(['gov', to])
Pinterest = reward_spk(from, json.block_num), //interest calc before balance changes.
Pinterest2 = reward_spk(json.to, json.block_num);
Promise.all([
Ppower,
Pgranted_to_from,
Pgranted_to_total,
Pgranting_to_from,
Pgranting_from_total,
Pup_from,
Pup_to,
Pdown_from,
Pdown_to,
Pgov,
Pinterest,
Pinterest2
])
.then((mem) => {
let from_power = mem[0],
granted_to_from = mem[1],
granted_to_total = mem[2],
granting_to_from = mem[3],
granting_from_total = mem[4],
up_from = mem[5],
up_to = mem[6],
down_from = mem[7],
down_to = mem[8],
ops = [];
if (amount < from_power && amount >= 0 && active && mem[9]) { //mem[9] checks for gov balance in to account.
if (amount > granted_to_from) {
let more = amount - granted_to_from;
if (up_from.max) {
up_from.max -= more;
}
if (down_from.max) {
down_from.max -= more;
}
if (up_to.max) {
up_to.max += more;
}
if (down_to.max) {
down_to.max += more;
}
ops.push({
type: "put",
path: ["granting", from, "t"],
data: granting_from_total + more,
});
ops.push({
type: "put",
path: ["granting", from, to],
data: granting_to_from + more,
});
ops.push({
type: "put",
path: ["granted", to, from],
data: granted_to_from + more,
});
ops.push({
type: "put",
path: ["granted", to, "t"],
data: granted_to_total + more,
});
ops.push({
type: "put",
path: ["pow", from],
data: from_power - more,
}); //weeks wait? chron ops? no because of the power growth at vote
ops.push({
type: "put",
path: ["up", from],
data: up_from,
});
ops.push({
type: "put",
path: ["down", from],
data: down_from,
});
ops.push({ type: "put", path: ["up", to], data: up_to });
ops.push({
type: "put",
path: ["down", to],
data: down_to,
});
const msg = @${from}| Has granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
} else if (amount < granted_to_from) {
let less = granted_to_from - amount;
if (up_from.max) {
up_from.max += less;
}
if (down_from.max) {
down_from.max += less;
}
if (up_to.max) {
up_to.max -= less;
}
if (down_to.max) {
down_to.max -= less;
}
ops.push({
type: "put",
path: ["granting", from, "t"],
data: granting_from_total - less,
});
ops.push({
type: "put",
path: ["granting", from, to],
data: granting_to_from - less,
});
ops.push({
type: "put",
path: ["granted", to, from],
data: granted_to_from - less,
});
ops.push({
type: "put",
path: ["granted", to, "t"],
data: granted_to_total - less,
});
ops.push({
type: "put",
path: ["pow", from],
data: from_power + less,
});
ops.push({
type: "put",
path: ["up", from],
data: up_from,
});
ops.push({
type: "put",
path: ["down", from],
data: down_from,
});
ops.push({ type: "put", path: ["up", to], data: up_to });
ops.push({
type: "put",
path: ["down", to],
data: down_to,
});
const msg = @${from}| Has granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
} else {
const msg = @${from}| Has already granted ${parseFloat(
amount / 1000
).toFixed(3)} to ${to};
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: [
"feed",
${json.block_num}:${json.transaction_id},
],
data: msg,
});
}
} else {
const msg = @${from}| Invalid delegation;
if (config.hookurl || config.status)
postToDiscord(
msg,
${json.block_num}:${json.transaction_id}
);
ops.push({
type: "put",
path: ["feed", ${json.block_num}:${json.transaction_id}],
data: msg,
});
}
store.batch(ops, pc);
})
.catch((e) => {
console.log(e);
});
}
```
The only thing new here to note is delegation are only allowed to accounts with a gov balance, which only node operating accounts can have. Removing or lowering a delegation will also calculate the SPK balance before the change. As far as I can figure there is no way to "double spend" Larynx for rewards... please check me on this, it's important.
API Stated previously front-ends will have to calculate SPK balances based on the same information, which means a little extra API is needed. This will need to be coupled with the interest rate stats and head block number.
Thank You Thank you to the community of node runners and that help me and each other run and improve this and other Hive software. I appreciate your feedback here and on our Discord Server
Vote for our Witness: * https://vote.hive.uno/@disregardfiat * https://vote.hive.uno/@threespeak
Contact @eddiespino if you need help.
https://3speak.tv/watch?v=spknetwork/rvsycrqq
Hello Hivers,
Today we had a great AMA, this is the recording. Thank you to @disregardfiat for his input and also to @starkerz and @theycallmedan. The AMA was recorded by @eddiespino and uploaded just a few hours later. You can read the questions here.
Breakaway communities Tutorial: * Easily Set up Your Own Web3 Enabled Breakaway Community Platform
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens so that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/ejggqoqk
Recording of the "Claim Drop Party".
About the SPK Network:
The SPK Network is a decentralized Web 3.0 protocol that rewards value creators and infrastructure providers appropriately and autonomously by distributing reward tokens in such a way that every user, creator, and platform, will be able to earn rewards on a level playing field.
https://3speak.tv/watch?v=spknetwork/lxclecds
This is a recording of the first official kick-off meeting for the SPK Netowork, where we go through every detail of the scope of work.
Intro & format of the meeting
Test nets:
-HIVE SON
-Token System
-NFT
Notes / actions:
Request community take part in the test net for the multi-sig wallet, as well as the other test nets
In attendance:
vaultec
bobinson
disregardfiat
Jeffkhull
gotgame
eddiespino
brianoflondon
starkerz
theycallmedan