Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into add-set-scanning-an…
Browse files Browse the repository at this point in the history
…d-account-head
  • Loading branch information
dguenther committed Oct 2, 2024
2 parents 78d499a + ab4c225 commit 12b52ca
Show file tree
Hide file tree
Showing 37 changed files with 601 additions and 314 deletions.
78 changes: 64 additions & 14 deletions components/NodeApp/Download/Download.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,76 @@ export function DownloadForCurrentPlatform({ downloadUrlsByPlatform }: Props) {

const linkProps = useMemo(() => {
if (!linkData)
return {
opacity: 0,
};
return [
{
opacity: 0,
},
];

const { url, label } = linkData;
return linkData.map(({ url, label, platform }) => {
if (url && label && platform) {
if (linkData.length === 1) {
return { href: url, children: "Download Now" };
}

return url && label
? { href: url, children: "Download Now" }
: { href: REPO_URL, children: "View on GitHub", target: "_blank" };
const downloadButtonLabel: string = (() => {
switch (platform) {
case "mac-arm": {
return "Apple Silicon";
}
case "mac-intel": {
return "Intel";
}
case "windows": {
return "Windows";
}
}
})();

return {
href: url,
children:
linkData.length === 1
? "Download Now"
: `Download for ${downloadButtonLabel}`,
};
}
if (!url || !label || !platform)
return { href: REPO_URL, children: "View on GitHub", target: "_blank" };

return url && label && platform
? {
href: url,
children:
linkData.length === 1
? "Download Now"
: `Download for ${platform}`,
}
: { href: REPO_URL, children: "View on GitHub", target: "_blank" };
});
}, [linkData]);

return (
<Flex direction="column" alignItems="center" maxW="100%">
<DownloadButton as="a" size="lg" mb={4} {...linkProps} />
{linkData?.label && (
<>
<Text>{linkData.label}</Text>
<Box my={3} w="120px" borderBottom="1px dashed black" />
</>
)}
<Flex
direction="row"
gap={4}
flexWrap="wrap"
justifyContent="center"
mb={linkProps.length > 1 ? 8 : 0}
>
{linkProps.map((lp, i) => (
<Flex direction="column" alignItems="center" key={i}>
<DownloadButton as="a" size="lg" {...lp} />
{linkProps.length === 1 && (
<>
<Text mt={4}>{linkData && linkData[i].label}</Text>
<Box my={3} w="120px" borderBottom="1px dashed black" />
</>
)}
</Flex>
))}
</Flex>
{downloadUrlsByPlatform && (
<Text
as="a"
Expand Down
8 changes: 8 additions & 0 deletions content/authors/authors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,12 @@ export const authors: Record<string, Author> = {
image_url: "/images/blog/iflabs.jpeg",
description: `IF Labs is an encryption-focused team that uses the Iron Fish protocol to build a world where users control their data.`,
},
foundation: {
name: "Iron Fish Foundation",
title: "Safe optional privacy for any asset",
url: "https://twitter.com/ironfishcrypto",
image_url: "/images/blog/ironfish_logo.png",
description: `Iron Fish is a Zero-Knowledge Proof based Layer 1 blockchain offering compliant, optional privacy for digital assets across 24 chains (and counting!).
Founded by Silicon Valley veterans and backed by prominent investors like a16z, Electric Capital, Dragonfly, Iron Fish is the first privacy chain to support multi-asset transactions.`,
},
} as const;
71 changes: 0 additions & 71 deletions content/blog/2024-05-31-game-night.mdx

This file was deleted.

34 changes: 34 additions & 0 deletions content/blog/2024-06-18-grants.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
author: elena
title: "Iron Fish Grants Program Updates"
description: "Learn more about the Iron Fish Grants Program and updates on current projects"
image: /images/blog/grants_updates.png
tags: [Iron Fish Foundation, grants]
---

## Iron Fish Foundation

The Iron Fish Foundation is dedicated to making web3 safe through privacy. Our mission is to bring privacy to crypto by growing the Iron Fish ecosystem and establishing it as the go-to privacy platform for all cryptocurrencies.

We collaborate with community members and organizations to accelerate the Iron Fish ecosystem's growth through developer grants, ecosystem grants, events, partnerships, education, resources, and much more!

## Iron Fish Grants Program

Our Grants Program plays an important role in our mission to fund builders and creators who are dedicated to bringing privacy to all crypto assets with Iron Fish. We prioritize projects that enhance user experience, interoperability, and generally expand use cases for Iron Fish.

Anyone who has an idea on improving Iron Fish or its ecosystem in any way is welcome to apply! Currently, we are focused on funding projects that prioritize bridging Iron Fish to other L1s/L2s/L3s, optimize performance of Iron Fish or Iron Fish wallets, or are working on educational efforts about anything Iron Fish related.

We’ve received numerous grant applications and reviewed all serious entries. The developer grants chosen for funding by the Iron Fish Foundation (as of this blog post date), based on their impact and background, are the following:

| Grant Recipient or Project Name | Grant Size | Grant Description | Status |
| ----------------------------------------- | --------------- | ------------------ | -------|
| [Oreoscan](https://www.oreoscan.info/en) | Medium | Iron Fish Block Explorer | ✅ Complete |
| [Fox Wallet](https://foxwallet.com/) | Medium | Retroactive grant for creating the very first mobile wallet for Iron Fish 🙌. The team was awarded further additional funding for more mobile wallet features.| ✅ Complete |
| Zk.Work | Medium | Public RPC provider for the Iron Fish blockchain. RPC endpoint: http://iron.hk.zk.work (docs coming soon) | ✅ Complete |
| [OreoWallet](https://oreowallet.com/) | Large | The very first browser wallet for Iron Fish with an external scanner for faster wallet syncing directly from a browser extension 🥳 | 🚧 WIP |
| [Chainport](https://www.chainport.io/) | Large | ChainPort is building a lock/mint bridge connecting Iron Fish to 20+ chains that they support, paving the way to private wrapped assets on Iron Fish from other chains such as private wrapped USDC, ETH, wBTC, and others.| 🚧 WIP |
| [Toucan Relay Bot](https://toucanrelay.toucantrickle.com/) | Medium | ToucanRelay is building a user-friendly transaction relay bot allowing users to initiate transfer transactions for their Iron Fish wallet directly using a chat bot. | 🚧 WIP |

([Grant sizes guide](/community/grants/grant_sizes))

Inspired to build something that enhances web3 privacy by utilizing what’s about to be the largest anonymity set for crypto? Head on over to the [grants application page](/community/grants/how_to_apply)!
43 changes: 43 additions & 0 deletions content/blog/2024-08-15-safety.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
author: foundation
title: "Safety and Compliance with Sanctions Screening and Real Time Threat Detection"
description: "Compliance and safety on the inflows of assets into Iron Fish via the ChainPort bridge"
image: /images/blog/safety_compliance_blog.png
tags: [Iron Fish Foundation, grants]
---
For decentralized finance and digital assets maintaining rigorous security and compliance standards is crucial. Iron Fish takes a proactive stance on sanctions screening, leveraging ChainPort’s expertise in security and safety to provide a secure foundation for private transactions.

### ChainPort’s Critical Role in Sanctions Screening

Iron Fish's core value proposition is simple yet powerful: all benefits of crypto, plus privacy of fiat. Iron Fish has the ability to give any crypto asset on any chain the option of privacy allowing users to achieve on-chain privacy in a safe and intuitive way. Instead of implementing sanctions screening mechanisms in the protocol, we leverage our bridge partnership with ChainPort to ensure that all transactions bridging tokens into Iron Fish via ChainPort comply with the highest security and regulatory standards. ChainPort, a custodian bridge, offers a security signals aggregator, which, via various state of the art services and providers, is responsible for conducting comprehensive screenings to deter bad actors from entering Iron Fish chain and adhering to best practices in security.

ChainPort’s approach involves several key elements:

1. **Exclusion List Creation**: ChainPort maintains an "Exclusion List" that prevents wallet addresses associated with malicious activities from interacting with the Iron Fish network. This is dynamically created using state of the art solutions based among others on predictive analytics and deep learning models, as well as regulated blacklists. This list includes:
- **Addresses listed on OFAC**: Ensuring entities associated with sanctions are blocked.
- **Addresses involved in DeFi-related hacks**: Blocking wallets linked to past exploits.
- **Addresses suspected of ongoing malicious activities**: Monitoring and blocking potential threats.
- **Addresses receiving funds from malicious wallets**: Preventing the flow of tainted funds.
- **Addresses with known private key leaks**: Excluding wallets with security vulnerabilities.

Wallet addresses that are categorized as “malicious” will be added to the Iron Fish exclusion list and will be unable to port to Iron Fish via the ChainPort bridge.

2. **Real-Time Threat Detection**: ChainPort continuously monitors for suspicious activities and potential threats. If any malicious behavior is detected, ChainPort has the capability to freeze affected tokens and investigate the issue promptly. This freezing mechanism also allows ChainPort to perform other security operations such as freeze assets for specific addresses or burn black funds).
3. **Governance and Multisig Mechanisms**: The above-mentioned Real Time Threat Detection mechanism can also be optionally granted to a DAO congress in the future, giving the broader Iron Fish community the ability to participate in crucial security decisions of freezing and unfreezing funds.

### The Importance of Sanctions Screening in Privacy Protocols

As Elena Nadolinski, CEO and Founder of Iron Fish, highlighted at the BlueYard Crypto Conversations Dinner in February 2024, privacy protocols face unique regulatory challenges. The balance between privacy and compliance is complex, especially when it comes to sanctions screening.

**FinCEN vs. OFAC: Implications for Developers**

- **FinCEN (Financial Crimes Enforcement Network)**: FinCEN regulates money transmitters and service businesses under the Bank Secrecy Act, focusing on anti-money laundering and anti-terrorism measures. While privacy protocols were initially not classified as money transmitters, past incidents have highlighted the potential for regulatory scrutiny.
- **OFAC (Office of Foreign Assets Control)**: OFAC enforces sanctions and requires strict adherence to its lists. Unlike FinCEN, OFAC does not need to prove intent; financially interacting with a sanctioned entity or individual can lead to severe consequences, including criminal prosecution. This makes it crucial for protocols to implement robust sanctions screening to avoid inadvertently engaging with sanctioned entities.

ChainPort’s role in addressing these challenges is vital. By ensuring that all interactions with the Iron Fish network are compliant with sanctions regulations, ChainPort helps mitigate the risks associated with privacy protocols and enhances overall platform security.

### A Commitment to Safety and Trust

Iron Fish’s stance on sanctions screening reflects our dedication to providing a secure and compliant environment for private transactions. Through our partnership with ChainPort, we ensure that our platform remains at the forefront of both privacy and regulatory adherence.

Whether you're a DeFi protocol needing privacy for traders, a DAO looking for private transfers to members, a business that requires financial privacy, or just someone who values privacy we welcome you to explore Iron Fish and stay tuned on the upcoming ChainPort launch.
20 changes: 0 additions & 20 deletions content/documentation/rpc/objects/rpcAccountImport.mdx

This file was deleted.

18 changes: 10 additions & 8 deletions content/documentation/rpc/wallet/export_account.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: wallet/exportAccount
description: RPC Wallet | Iron Fish Documentation
---

Exports the keys to the default account, or the named account if `account` is specified.
Exports the keys of the default account, or the named account if `account` is specified.

The `spendingKey` will be null in the response if `viewOnly = true` or if exporting a view-only account.

Expand All @@ -17,21 +17,23 @@ The `spendingKey` will be null in the response if `viewOnly = true` or if export
language?: LanguageKey
}
```
[Supported AccountFormats](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/wallet/account/encoder/encoder.ts)

[Supported Mnemonic Languages](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/utils/language.ts)
Supported [AccountFormats](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/wallet/account/encoder/encoder.ts#L27)
- Base64Json: The full account and all keys as a JSON string then encoded in base64.
- JSON: The full account and all keys as a JSON string
- Mnemonic: The private key in 12 word format in the specified language
- SpendingKey: The private key as a hex-encoded string.

[Supported Mnemonic Languages](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/utils/language.ts#L7)

#### Response

If no format is specified, the legacy `RpcAccountImport` type will be returned. Otherwise, the RPC will serialize the account into a string of the desired format.
The RPC will serialize the account into a string of the desired format.

```ts
{
account: string | RpcAccountImport | null
account: string | null
}
```

RPC Objects:
- [RpcAccountImport](/developers/documentation/rpc/objects/rpcAccountImport)

###### [View on Github](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/rpc/routes/wallet/exportAccount.ts)
1 change: 1 addition & 0 deletions content/documentation/rpc/wallet/get_balance.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ the default account will be used. If the asset is not specified, `$IRON` will be
pending: string
pendingCount: number
available: string
availableNoteCount: number
confirmations: number
blockHash: string | null
sequence: number | null
Expand Down
1 change: 1 addition & 0 deletions content/documentation/rpc/wallet/get_balances.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Gets the wallet's `$IRON` balance, as well as balances of custom assets of the g
pending: string
pendingCount: number
available: string
availableNoteCount: number
blockHash: string | null
sequence: number | null
/**
Expand Down
10 changes: 5 additions & 5 deletions content/documentation/rpc/wallet/import_account.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@ title: wallet/importAccount
description: RPC Wallet | Iron Fish Documentation
---

Imports an encoded account and it's keys into the wallet.

The string is typically generated by the [`exportAccount` RPC](/developers/documentation/rpc/wallet/export_account), although the string can be [manually generated with the sdk](https://github.com/iron-fish/ironfish/blob/master/ironfish/src/wallet/account/encoder/account.ts).

This endpoint also supports structured input.
The optional `createdAt` field can be used to set the block sequence to start scanning from for the imported account. Note that, if the account received any transactions on a block before this sequence, then those transactions will *not* appear in the account's balance.

#### Request

```ts
{
account: RpcAccountImport | string
account: string
name?: string
rescan?: boolean
createdAt?: number
}
```

Rpc Objects:
- [RpcAccountImport](/developers/documentation/rpc/objects/rpcAccountImport)

#### Response

```ts
Expand Down
Loading

0 comments on commit 12b52ca

Please sign in to comment.