diff --git a/.github/workflows/contract-release.yml b/.github/workflows/contract-release.yml index e73366e2..b4b07bac 100644 --- a/.github/workflows/contract-release.yml +++ b/.github/workflows/contract-release.yml @@ -17,7 +17,7 @@ jobs: name: Compile Stellar smart contract for production and create release permissions: contents: write # in order to create releases - uses: stellar-expert/soroban-build-workflow/.github/workflows/release.yml@8764eba5769e4ffb63883889c2db5cc12eb44ef8 + uses: stellar-expert/soroban-build-workflow/.github/workflows/release.yml@fbd0e2c5bbcbcd22439c06b5f1da47e2b27672d4 with: release_name: ${{ github.event.inputs.release_name }} release_description: "Tansu contract release" diff --git a/.github/workflows/dapp-ipfs.yml b/.github/workflows/dapp-ipfs.yml index 6c700650..a615777c 100644 --- a/.github/workflows/dapp-ipfs.yml +++ b/.github/workflows/dapp-ipfs.yml @@ -39,7 +39,7 @@ jobs: run: bun run build - name: Generate artifact attestation for dist - uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 + uses: actions/attest-build-provenance@c4fbc648846ca6f503a13a2281a5e7b98aa57202 with: subject-path: "./dapp/dist/*" diff --git a/Cargo.lock b/Cargo.lock index 1182ea66..55b4b6fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1254,9 +1254,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -1275,9 +1275,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", diff --git a/dapp/package.json b/dapp/package.json index bb9e8e02..b480decb 100644 --- a/dapp/package.json +++ b/dapp/package.json @@ -2,15 +2,15 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/netlify": "^5.5.4", - "@astrojs/react": "^3.6.3", - "@astrojs/tailwind": "5.1.2", + "@astrojs/react": "^4.0.0", + "@astrojs/tailwind": "5.1.3", "@creit.tech/sorobandomains-sdk": "^0.1.4", "@creit.tech/stellar-wallets-kit": "^1.3.0", "@mdxeditor/editor": "^3.20.0", "@nanostores/react": "^0.8.2", "@stellar/stellar-sdk": "^13.0.0", "@web3-storage/w3up-client": "^16.5.2", - "astro": "4.16.16", + "astro": "4.16.17", "astro-seo": "^0.8.4", "github-markdown-css": "^5.8.1", "install": "^0.13.0", diff --git a/dapp/public/icons/logos/logo_black.svg b/dapp/public/icons/logos/logo_black.svg new file mode 100644 index 00000000..3ccb6918 --- /dev/null +++ b/dapp/public/icons/logos/logo_black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/dapp/public/icons/logos/tansu.svg b/dapp/public/icons/logos/tansu.svg deleted file mode 100644 index 04d54268..00000000 --- a/dapp/public/icons/logos/tansu.svg +++ /dev/null @@ -1,217 +0,0 @@ - - - - diff --git a/dapp/public/icons/logos/twitter.svg b/dapp/public/icons/logos/twitter.svg deleted file mode 100644 index 28198cf2..00000000 --- a/dapp/public/icons/logos/twitter.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/dapp/public/logo.svg b/dapp/public/logo.svg index 362f087a..330deb30 100644 --- a/dapp/public/logo.svg +++ b/dapp/public/logo.svg @@ -1,217 +1,16 @@ - - - + + + + + + + + + + + + + + + diff --git a/dapp/src/components/layout/Footer.astro b/dapp/src/components/layout/Footer.astro index e60f13e6..3da23f05 100644 --- a/dapp/src/components/layout/Footer.astro +++ b/dapp/src/components/layout/Footer.astro @@ -10,7 +10,11 @@ const contractId = import.meta.env.PUBLIC_TANSU_CONTRACT_ID;
- (//) + (//)
© {year} Tansu, diff --git a/website/blog/2024-12-07-dao.mdx b/website/blog/2024-12-07-dao.mdx new file mode 100644 index 00000000..59b94c02 --- /dev/null +++ b/website/blog/2024-12-07-dao.mdx @@ -0,0 +1,52 @@ +--- +slug: dao +title: A Decentralized Autonomous Organization (DAO) for every project +authors: pamphile +tags: [dapp, dao] +--- + +Tansu is getting a Decentralized Autonomous Organization (DAO) system! Communities will be able to fully govern their project in a decentralized fashion. + +All projects created on Tansu will get their very own DAO. Forget sending an email as a dead letter to a mailing list, with a DAO, there are clear rules, the process is transparent, more fair and there is an immutable record of every single decision. + + + +### Decentralized Autonomous Organization (DAO) + +A DAO is an organization where its rules are strictly enforced by the use of smart contracts. You cannot bend some rules and everyone in the community gets treated impartially depending on their status in the DAO. All of which is transparent. DAOs are set to transform the governance of projects. + +### Proposals + +Maintainers can create proposals for their project. These can be about anything, from changing the API of a function, adding a new feature to deciding when to meet for your community calls. + +![List of proposals](/assets/blog/dao_1_proposals.png) + +### Storing proposals + +All proposals are registered on-chain and anyone can inspect them. + +![Proposal on-chain](/assets/blog/dao_1_chain.png) + +But the proposal themselves are not stored on-chain as it would be costly and impractical. Instead, proposals are hosted on [IPFS](https://ipfs.tech). This was a natural choice as IPFS is the de facto answer to decentralized storage. + +![Proposal on IPFS](/assets/blog/dao_1_ipfs.png) + +:::info[Primer on IPFS] + +See the previous [post](2024-10-20-ipfs.mdx). + +::: + +### Outcomes + +A proposal can have 3 different outcome. It's either accepted, rejected or cancelled. The start of the show here is that outcomes can trigger transactions! + +![Proposal outcomes](/assets/blog/dao_1_outcomes.png) + +When creating a proposal, you can give a transaction and when the proposal voting period ends, a maintainer will trigger the proposal execution which will trigger it's voted outcome. + +This mechanism is very powerful because it allows to manage very important and complex actions such as making a release, adding a new maintainer or spending funds. All these actions can now be recorded on-chain for everyone to see and validate. + +### Closing thoughts + +Careful readers will have noted that I did not talk about voting. Once more, we are going to do things a bit differently here. Votes are not going to be (directly) associated with a token holding, rather your voting power will depend on your reputation and what you are doing in your project and the extended community. Stay tuned! diff --git a/website/blog/tags.yml b/website/blog/tags.yml index 3265d5b7..4940dc52 100644 --- a/website/blog/tags.yml +++ b/website/blog/tags.yml @@ -3,6 +3,11 @@ dapp: permalink: /dapp description: Decentralized Application +dao: + label: dao + permalink: /dao + description: Decentralized Autonomous Organization + scf: label: scf permalink: /scf diff --git a/website/docs/intro.md b/website/docs/intro.md index 65edb609..f997a24b 100644 --- a/website/docs/intro.md +++ b/website/docs/intro.md @@ -4,6 +4,32 @@ sidebar_position: 1 # Welcome to Tansu! -Tansu adds an extra layer of security when developing Open Source projects. In essence, it proposes a solution to track code changes and enable anyone to verify that the code hosted on GitHub is indeed the same. Coupled with other best practices, such as, code signing and attestation of provenance, Tansu guarantees that the code history has not been tampered with. +Tansu is a novel way to manage open source projects. Open source development is hard: -Tansu is fully Open-Source, join us on [GitHub](https://github.com/tupui/soroban-versioning)! +- supply Chain Security concerns, +- lack of transparency, +- unfair retribution to participants, +- non-working governance due to the heavy reliance of mailing lists and forums, +- centralized platforms (GitHub, GitLab, etc.) + +It all comes down to centralization and obfuscation. Developing your project with Tansu means adopting a decentralized first approach, effectively addressing all these problems. + +## Difference with GitHub + +Tansu does not replace GitHub, or your preferred hosting solution, rather it complements it. GitHub is great at hosting, sharing code and making change requests. What Tansu brings is a set of tools to manage and govern your project. + +## Open Governance + +Projects on Tansu get their very own Decentralized Autonomous Organization (DAO). The community of a project is able to vote on new features, propose organizational changes or even trigger complex actions such as making a release or adding a new maintainer to a project. + +The project have a wallet and their DAO is used to control the funds' allocation. There are mainly two pools. The first pool is dedicated to developers. Funds are automatically distributed to active maintainers based on specific criteria. The rest of the funds is managed by the DAO for other purposes such as compensating non-developers, infrastructure costs, or even organizing events. + +## Security + +Tansu adds an extra layer of security. It proposes a solution to track code changes on-chain and enable anyone to verify that the code hosted on GitHub is indeed the same. Coupled with other best practices, such as, reproducible build, code signing and attestation of provenance, Tansu guarantees that the code history has not been tampered with. + +## Still building + +Tansu is still in early development. Things change fast and new features are added as we play with the protocol and get feedback from the community. + +Tansu is fully Open-Source, so join us on [GitHub](https://github.com/tupui/soroban-versioning) and let's build together! diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 21150ff6..b6293282 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -3,8 +3,8 @@ import type {Config} from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { - title: 'Tansu - Soroban Versioning', - tagline: 'Bringing open source software development onto the Stellar blockchain', + title: 'Tansu', + tagline: 'Bringing open source software development to the Stellar blockchain', favicon: 'img/logo.svg', // Set the production url of your site here diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx index efd8d706..b78cd0ba 100644 --- a/website/src/components/HomepageFeatures/index.tsx +++ b/website/src/components/HomepageFeatures/index.tsx @@ -15,7 +15,7 @@ const FeatureList: FeatureItem[] = [ Svg: require('@site/static/img/soroban-wordmark-temp.svg').default, description: ( <> - Tansu is a Soroban smart contract running on the Stellar blockchain. This allows extremely low operational costs, efficiency and security with a fast finality. + Tansu's Soroban smart contract runs on the Stellar blockchain. This allows extremely low operational costs, efficiency and security. ), }, @@ -24,7 +24,7 @@ const FeatureList: FeatureItem[] = [ Svg: require('@site/static/img/git-logo.svg').default, description: ( <> - Tansu brings decentralization back to Git. Pushing new hashes on the Stellar blockchain to ensure immutability. + Tansu brings decentralization back to Git. From pushing new hashes to making governance decision, all on the Stellar blockchain. ), }, diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 2bc6a4cf..5b0a0923 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -6,25 +6,25 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; + --ifm-color-primary: #af44f2; + --ifm-color-primary-dark: #a327f0; + --ifm-color-primary-darker: #9c19ef; + --ifm-color-primary-darkest: #820ecb; + --ifm-color-primary-light: #bb61f4; + --ifm-color-primary-lighter: #c26ff5; + --ifm-color-primary-lightest: #d49bf8; --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --docusaurus-highlighted-code-line-bg: rgba(245,246,252, 0.1); } /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme='dark'] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-color-primary: #af44f2; + --ifm-color-primary-dark: #a327f0; + --ifm-color-primary-darker: #9c19ef; + --ifm-color-primary-darkest: #820ecb; + --ifm-color-primary-light: #bb61f4; + --ifm-color-primary-lighter: #c26ff5; + --ifm-color-primary-lightest: #d49bf8; + --docusaurus-highlighted-code-line-bg: rgba(188,191,204, 0.3); } diff --git a/website/static/assets/blog/dao_1_chain.png b/website/static/assets/blog/dao_1_chain.png new file mode 100644 index 00000000..dbb1258a Binary files /dev/null and b/website/static/assets/blog/dao_1_chain.png differ diff --git a/website/static/assets/blog/dao_1_ipfs.png b/website/static/assets/blog/dao_1_ipfs.png new file mode 100644 index 00000000..9c1d6f01 Binary files /dev/null and b/website/static/assets/blog/dao_1_ipfs.png differ diff --git a/website/static/assets/blog/dao_1_outcomes.png b/website/static/assets/blog/dao_1_outcomes.png new file mode 100644 index 00000000..a17bfa06 Binary files /dev/null and b/website/static/assets/blog/dao_1_outcomes.png differ diff --git a/website/static/assets/blog/dao_1_proposals.png b/website/static/assets/blog/dao_1_proposals.png new file mode 100644 index 00000000..8963e7d2 Binary files /dev/null and b/website/static/assets/blog/dao_1_proposals.png differ diff --git a/website/static/assets/docs/logomark_black.png b/website/static/assets/docs/logomark_black.png new file mode 100644 index 00000000..2c87b924 Binary files /dev/null and b/website/static/assets/docs/logomark_black.png differ diff --git a/website/static/img/logo.png b/website/static/img/logo.png index 03126563..2c87b924 100644 Binary files a/website/static/img/logo.png and b/website/static/img/logo.png differ diff --git a/website/static/img/logo.svg b/website/static/img/logo.svg index cf33d489..fe238a41 100644 --- a/website/static/img/logo.svg +++ b/website/static/img/logo.svg @@ -1,198 +1,20 @@ - - - - + + + + + + + + + + + + + + + \ No newline at end of file