Skip to content

Instantly share code, notes, and snippets.

View pmatsinopoulos's full-sized avatar
💻
Programming

Panos Matsinopoulos pmatsinopoulos

💻
Programming
View GitHub Profile
@pmatsinopoulos
pmatsinopoulos / main.ts
Created July 9, 2024 13:08
Farcaster KeyRegistry List Connected Apps of a Farcaster ID
/*
This script lists the Farcaster client apps that a Farcaster account has
registered as client apps. Farcaster apps are _account keys_ registered
on-chain, in Optimism. We are using KeyRegistry contract to read the
number and keys of an FID.
*/
import { ethers } from "hardhat";
import loadContractAbi from "./loadContractAbi";
const KEY_REGISTRY_CONTRACT_ADDRESS =
@pmatsinopoulos
pmatsinopoulos / KeyRegistry.json
Last active July 9, 2024 13:37
Farcaster KeyRegistry Contract ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "_idRegistry",
"type": "address"
},
{
"internalType": "address",
@pmatsinopoulos
pmatsinopoulos / hardhat.config.ts
Created July 9, 2024 12:43
Hardhat configuration to connect to optimism via Alchemy
import { HardhatUserConfig, vars } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
const ALCHEMY_API_KEY = vars.get("ALCHEMY_API_KEY");
const ACCOUNT_PRIVATE_KEY = vars.get("ACCOUNT_PRIVATE_KEY")
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
optimism: {
@pmatsinopoulos
pmatsinopoulos / Box.test.js
Created June 15, 2024 11:27
test/contracts/Box.test.js used in OpenZeppelin Tutorial
// Load dependencies
const { expect } = require("chai");
require("@nomiclabs/hardhat-ethers");
require("@nomicfoundation/hardhat-chai-matchers");
// Start test block
describe("Box", function () {
const value = 42n;
// SPDX-License-Identifier: MIT
pragma solidity 0.8.22;
// Requirements:
//
// - We want only the creator to create coins.
// - Anyone can send coins to each other without a need for registering with a username and password.
// All we need is an Ethereum keypair.
//
contract Coin {
@pmatsinopoulos
pmatsinopoulos / decrypt_file_using_ror_utilities.rb
Created April 28, 2024 06:12
Encrypt a file using RoR Utilities
content_path = Rails.root.join('secret_content_file.txt.enc')
encrypted_file = ActiveSupport::EncryptedFile.new(
content_path: content_path,
key_path: Rails.application.config.credentials.key_path,
env_key: "RAILS_MASTER_KEY",
raise_if_missing_key: true
)
contents = encrypted_file.read
@pmatsinopoulos
pmatsinopoulos / encrypt_file_using_ror_utilities.rb
Created April 28, 2024 06:07
Encrypt a file using RoR Utilities
content_path = Rails.root.join('secret_content_file.txt')
encrypted_file = ActiveSupport::EncryptedFile.new(
content_path: "#{content_path}.enc",
key_path: Rails.application.config.credentials.key_path,
env_key: "RAILS_MASTER_KEY",
raise_if_missing_key: true
)
contents = File.read(content_path)
@pmatsinopoulos
pmatsinopoulos / route_table_to_nat_gateway.tf
Created August 28, 2023 14:26
AWS Public and Private Subnets - route_table_to_nat_gateway.tf
resource "aws_route_table" "to_nat_gateway" {
vpc_id = aws_vpc.private_and_public_subnets.id
tags = {
"Name" = "access-to-nat-gateway"
}
}
resource "aws_route" "to_nat_gateway" {
route_table_id = aws_route_table.to_nat_gateway.id
@pmatsinopoulos
pmatsinopoulos / nat_gateway.tf
Created August 28, 2023 14:19
AWS Private and Public Subnets - nat_gateway.tf
resource "aws_eip" "nat_gateway" {
depends_on = [aws_internet_gateway.private_and_public_subnets]
}
resource "aws_nat_gateway" "private_and_public_subnets" {
connectivity_type = "public"
allocation_id = aws_eip.nat_gateway.id
subnet_id = aws_subnet.subnet_2.id # public subnet
tags = {
@pmatsinopoulos
pmatsinopoulos / ec2_key_pair_internal.tf
Created August 28, 2023 12:15
AWS Private and Public Subnets - ec2_keypair_internal.tf
resource "aws_key_pair" "internal_to_vpc" {
key_name = "${local.project}-internal"
public_key = file("${path.module}/id_rsa_internal.pub")
tags = {
"Name" = "${local.project}-internal"
}
}