Skip to content

Instantly share code, notes, and snippets.

View rphansen91's full-sized avatar

Ryan Hansen rphansen91

  • Antengo
  • San Diego
View GitHub Profile
@rphansen91
rphansen91 / decorate.ts
Last active April 1, 2022 23:04
Generic Decorator
type Fn = (...args: any) => any
type Awaited<T> = T extends PromiseLike<infer U> ? U : T
export function someDecorator<V extends Fn>(method: V) {
// Do some initialization logic here
return async function (...args: Parameters<V>): Promise<Awaited<ReturnType<V>>> {
// Do some args manipulation or validation
const value = await method(...args)
@rphansen91
rphansen91 / .deps...npm...@openzeppelin...contracts...token...ERC1155...ERC1155.sol
Created April 14, 2021 15:50
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.1+commit.df193b15.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";
@rphansen91
rphansen91 / query.js
Last active March 27, 2021 17:16
Moralis Hooks
import React from "react";
import Moralis from "moralis";
const defaultQueryOptions = {
live: false,
skip: false,
filter: () => {},
onCreate: (object, vs) => [object].concat(vs ?? []),
onUpdate: (object, vs) => vs.map((v) => (v.id === object.id ? object : v)),
};
@rphansen91
rphansen91 / estimate.js
Last active August 5, 2020 20:33
Calculate estimated time until next NRG Masternode reward
const nodeApi = "https://nodeapi.energi.network/";
const owner = "YOUR_MASTERNODE_OWNER_ADDRESS"
estimateBlocksTilNextMasternodeReward(owner)
.then(({ estimatedTimestamp }) => console.log(`Next reward at ${new Date(estimatedTimestamp).toLocaleString()}`))
function listMasternodes () {
return rpc(nodeApi, "masternode_listMasternodes");
}
import { makeExecutableSchema } from '@graphql-tools/schema'
import { addResolveFunctionsToSchema } from 'apollo-server'
import { graphqlTypeDate, graphqlTypeObjectId, makeAugmentedSchema, mongoTypeDefs } from 'ts-mongo-codegen'
// The following import is the file generated in previous step
import { mountainMutationResolvers, mountainQueryResolvers, mountainResolvers } from './types.generated'
import { composeResolvers } from '@graphql-tools/resolvers-composition'
import { mountainSchema } from './gql/mountains'
import { isAuthenticated } from './auth'
// Make an executable schema with the mongo types and our custom mountain schema type
{
"schema": ["./node_modules/ts-mongo-codegen/dist/types/mongo-types.ts", "./src/gql/*.ts"],
"generates": {
"./src/types.generated.ts": {
"plugins": [
"typescript",
"typescript-operations",
"typescript-resolvers",
"ts-mongo-codegen"
]
@rphansen91
rphansen91 / MountainSchema.ts
Created June 30, 2020 06:08
MountainSchema.ts
import gql from 'graphql-tag'
export const mountainSchema = gql`
type Mountain @collection(name: "mountains", crud: true) {
id: ObjectId
name: String @insert @set @filter
meters: Float @insert @set @filter
feet: Float @insert @set @filter
location: String @insert @set @filter
}
@rphansen91
rphansen91 / HawkCounter.tsx
Created June 14, 2020 19:43
HawkCounter.tsx
import React from 'react';
import { hawk, hawkeye, useHawkState, useHawkSetState } from 'react-hawk';
import Counter from '../Components/Counter'
const counterState = hawk({
key: 'counter',
default: 0
});
@rphansen91
rphansen91 / RecoilCounter.tsx
Created June 14, 2020 19:42
RecoilCounter.tsx
import React from 'react';
import { atom, selector, useRecoilValue, useSetRecoilState } from 'recoil';
import Counter from '../Components/Counter'
const counterState = atom({
key: 'counter',
default: 0
});
@rphansen91
rphansen91 / ContextCounter.tsx
Last active June 14, 2020 19:42
react-hawk vs context vs recoil examples
import React, {
createContext,
useContext,
useState,
FC,
Dispatch,
SetStateAction,
} from "react";
import Counter from "../Components/Counter";