当前位置:首页 » 币种行情 » 灰度eth估值方法

灰度eth估值方法

发布时间: 2023-07-27 12:10:10

『壹』 求用vc++编程实现显示灰度直方图的详细步骤,越详细越好

步骤和程序:
打开VC程序——文件——新建——工程中的MFC AppWizard(exe),在工程下面的框中输入工程名(假定工程名为111),点确定——选多重文档,点下一个——后面都点下一个直到完成确定,基本框架就完成了,下面就加代码。
这时VC界面上左边框的下面有三个按钮:ClassView、ResourceView和FileView,ClassView里面是工程111的类:CAdoutDlg、CChildFrame、CMy111App、CMy111Doc、CMy111View和Globals;点ResourceView里面是资源类:Accelerator、Dialog、Icon、Menu、String Table、Toolbar和Version;点开FileView里面是文件类:Source File、Header Files、Resource Files和ReadMe.txt。
点界面的“工程”按钮——添加工程——新建——选C++ Source File,在文件下面的框里输入文件名(如DIBAPI),点“结束”,这样在FileView中的Source Files里面就多了一个DIBAPI.cpp文件,所有的代码都加在该文件中。再点界面的“工程”按钮——添加工程——新建——选C/C++ Header File,在文件下面的框里输入文件名(和前面的文件名必须一致),点“结束”,这样在FileView中的Header Files里面就多了一个DIBAPI.h文件,该文件是DIBAPI.cpp的头文件。
点开DIBAPI.h文件,里面是空白的,把如下代码考入文件中:
//DIBAPI.h
#ifndef _INC_DIBAPI
#define _INC_DIBAPI

DECLARE_HANDLE(HDIB);

#define PALVERSION 0x300

#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER))

#define RECTWIDTH(lpRect) ((lpRect)->right-(lpRect)->left)

#define RECTHEIGHT(lpRect) ((lpRect)->bottom-(lpRect)->top)

#define WIDTHBYTES(bits) (((bits)+31)/32*4)

#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')

BOOL WINAPI PaintDIB(HDC,LPRECT,HDIB,LPRECT,CPalette* pPal);
BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* cPal);
LPSTR WINAPI FindDIBBits(LPSTR lpbi);
DWORD WINAPI DIBWidth(LPSTR lpDIB);
DWORD WINAPI DIBHeight(LPSTR lpDIB);
WORD WINAPI PaletteSize(LPSTR lpbi);
WORD WINAPI DIBNumColors(LPSTR lpbi);
HGLOBAL WINAPI CopyHandle(HGLOBAL h);

BOOL WINAPI SaveDIB(HDIB hDib,CFile& file);
HDIB WINAPI ReadDIBFile(CFile& file);

//在此处输入自己的函数声明

#endif//!_INC_DIBAPI

上面这些函数是实现图像的读取、存储等图像处理的基本功能的,你将自己需要的函数也输入到“//在此处输入自己的函数声明”的下面。
点开DIBAPI.cpp文件,里面是空白的,将如下代码加入其中:
//DIBAPI.cpp

#include "stdafx.h"
#include "DIBAPI.h"

WORD WINAPI DIBNumColors(LPSTR lpbi)
{
WORD wBitCount;

if(IS_WIN30_DIB(lpbi))
{
DWORD dwClrUsed;
dwClrUsed=((LPBITMAPINFOHEADER)lpbi)->biClrUsed;

if(dwClrUsed)
return (WORD)dwClrUsed;
}

if(IS_WIN30_DIB(lpbi))
wBitCount=((LPBITMAPINFOHEADER)lpbi)->biBitCount;
else
wBitCount=((LPBITMAPCOREHEADER)lpbi)->bcBitCount;

switch(wBitCount)
{
case 1:
return 2;
case 4:
return 16;
case 8:
return 256;
default:
return 0;
}
}

WORD WINAPI PaletteSize(LPSTR lpbi)
{
if(IS_WIN30_DIB(lpbi))
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBQUAD));
else
return (WORD)(DIBNumColors(lpbi)*sizeof(RGBTRIPLE));
}

LPSTR WINAPI FindDIBBits(LPSTR lpbi)
{
return (lpbi+*(LPDWORD)lpbi+::PaletteSize(lpbi));
}

DWORD WINAPI DIBWidth(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;

lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))
return lpbmi->biWidth;
else
return (DWORD)lpbmc->bcWidth;
}

DWORD WINAPI DIBHeight(LPSTR lpDIB)
{
LPBITMAPINFOHEADER lpbmi;
LPBITMAPCOREHEADER lpbmc;

lpbmi=(LPBITMAPINFOHEADER)lpDIB;
lpbmc=(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))
return lpbmi->biHeight;
else
return (DWORD)lpbmc->bcHeight;
}

BOOL WINAPI PaintDIB(HDC hDC,LPRECT lpDCRect,HDIB hDIB,LPRECT lpDIBRect,CPalette* pPal)
{
LPSTR lpDIBHdr;
LPSTR lpDIBBits;
BOOL bSuccess=FALSE;
HPALETTE hPal=NULL;
HPALETTE hOldPal=NULL;

if(hDIB==NULL)
return FALSE;

lpDIBHdr=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpDIBBits=FindDIBBits(lpDIBHdr);

if(pPal!=NULL)
{
hPal=(HPALETTE)pPal->m_hObject;
hOldPal=::SelectPalette(hDC,hPal,TRUE);
}

::SetStretchBltMode(hDC,COLORONCOLOR);

if((RECTWIDTH(lpDCRect)==RECTWIDTH(lpDIBRect))&&(RECTHEIGHT(lpDCRect)==RECTHEIGHT(lpDIBRect)))
{
bSuccess=::SetDIBitsToDevice(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
(int)DIBHeight(lpDIBHdr)-lpDIBRect->top-RECTHEIGHT(lpDIBRect),0,(WORD)DIBHeight(lpDIBHdr),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS);
}
else
{
bSuccess=::StretchDIBits(hDC,lpDCRect->left,lpDCRect->top,RECTWIDTH(lpDCRect),RECTHEIGHT(lpDCRect),lpDIBRect->left,\
lpDIBRect->top,RECTWIDTH(lpDIBRect),RECTHEIGHT(lpDIBRect),\
lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,SRCCOPY);
}

::GlobalUnlock((HGLOBAL)hDIB);

if(hOldPal)
::SelectPalette(hDC,hOldPal,TRUE);

GlobalUnlock(hDIB);

return bSuccess;
}

BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* pPal)
{
LPLOGPALETTE lpPal;
HANDLE hLogPal;
HPALETTE hPal=NULL;
LPSTR lpbi;
LPBITMAPINFO lpbmi;
LPBITMAPCOREINFO lpbmc;
BOOL bWinStyleDIB;
int i;
WORD wNumColors;
BOOL bResult=FALSE;

if(hDIB==NULL)
return FALSE;

lpbi=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
lpbmi=(LPBITMAPINFO)lpbi;

lpbmc=(LPBITMAPCOREINFO)lpbi;

wNumColors=DIBNumColors(lpbi);

bWinStyleDIB=IS_WIN30_DIB(lpbi);

if(wNumColors!=0)
{
hLogPal=::GlobalAlloc(GHND,sizeof(LOGPALETTE)+sizeof(PALETTEENTRY)*wNumColors);

if(hLogPal==0)
{
::GlobalUnlock((HGLOBAL)hDIB);
return FALSE;
}

lpPal=(LPLOGPALETTE)::GlobalLock(hLogPal);

lpPal->palVersion=PALVERSION;
lpPal->palNumEntries=(WORD)wNumColors;
bWinStyleDIB=IS_WIN30_DIB(lpbi);

for(i=0;i<(int)wNumColors;i++)
{
if(bWinStyleDIB)
{
lpPal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen=lpbmi->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue=lpbmi->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags=0;
}
else
{
lpPal->palPalEntry[i].peRed=lpbmc->bmciColors[i].rgbtRed;
lpPal->palPalEntry[i].peGreen=lpbmc->bmciColors[i].rgbtGreen;
lpPal->palPalEntry[i].peBlue=lpbmc->bmciColors[i].rgbtBlue;
lpPal->palPalEntry[i].peFlags=0;
}
}

bResult=pPal->CreatePalette(lpPal);

::GlobalUnlock((HGLOBAL)hLogPal);
::GlobalFree((HGLOBAL)hLogPal);
}

::GlobalUnlock((HGLOBAL)hDIB);
return bResult;
}

HGLOBAL WINAPI CopyHandle(HGLOBAL h)
{
if(h==NULL)
return NULL;

DWORD dwLen=::GlobalSize((HGLOBAL)h);

HGLOBAL hCopy=::GlobalAlloc(GHND,dwLen);

if(hCopy!=NULL)
{
void* lpCopy=::GlobalLock((HGLOBAL)hCopy);
void* lp=::GlobalLock((HGLOBAL)h);

memcpy(lpCopy,lp,dwLen);

::GlobalUnlock(hCopy);
::GlobalUnlock(h);
}
return hCopy;
}

BOOL WINAPI SaveDIB(HDIB hDib,CFile& file)
{
BITMAPFILEHEADER bmfHdr;
LPBITMAPINFOHEADER lpBI;
DWORD dwDIBSize;

if(!hDib)
return FALSE;

lpBI=(LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)hDib);

if(lpBI==NULL)
return FALSE;

if(!IS_WIN30_DIB(lpBI))
{
::GlobalUnlock((HGLOBAL)hDib);
return FALSE;
}

bmfHdr.bfType=DIB_HEADER_MARKER;

dwDIBSize=*(LPDWORD)lpBI+::PaletteSize((LPSTR)lpBI);

if((lpBI->biCompression==BI_RLE8)||(lpBI->biCompression==BI_RLE4))
dwDIBSize+=lpBI->biSizeImage;
else
{
DWORD dwBmBitsSize;
dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))*lpBI->biHeight;
dwDIBSize+=dwBmBitsSize;

lpBI->biSizeImage=dwBmBitsSize;
}

bmfHdr.bfSize=dwDIBSize+sizeof(BITMAPFILEHEADER);
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved2=0;

bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI->biSize+::PaletteSize((LPSTR)lpBI);

TRY
{
file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));
file.WriteHuge(lpBI,dwDIBSize);
}
CATCH(CFileException,e)
{
::GlobalUnlock((HGLOBAL)hDib);
THROW_LAST();
}
END_CATCH

::GlobalUnlock((HGLOBAL)hDib);

return TRUE;
}

HDIB WINAPI ReadDIBFile(CFile& file)
{
BITMAPFILEHEADER bmfHeader;
DWORD dwBitsSize;
HDIB hDIB;
LPSTR pDIB;

dwBitsSize=file.GetLength();

if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader))
return NULL;

if(bmfHeader.bfType!=DIB_HEADER_MARKER)
return NULL;

hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,dwBitsSize);

if(hDIB==0)
return NULL;

pDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);

if(file.ReadHuge(pDIB,dwBitsSize-sizeof(BITMAPFILEHEADER))!=dwBitsSize-sizeof(BITMAPFILEHEADER))
{
::GlobalUnlock((HGLOBAL)hDIB);
::GlobalFree((HGLOBAL)hDIB);
return NULL;
}

::GlobalUnlock((HGLOBAL)hDIB);

return hDIB;
}

//在此处输入自己的函数定义

上面是DIBAPI.h头文件中声明的函数的定义,你将自己的函数定义加到“//在此处输入自己的函数定义”后面。
下面加相应的消息映射函数,点Ctrl+W键,会出现MFC ClassWizard对话框,点Message Maps,在Class name下面的框中选择CMy111Doc,在Messages里面选中OnOpenDocument,然后点击Add Function按钮就加入了相应的消息映射函数,同样的方法以此加入OnSaveDocument、DeleteContents、CanCloseFrame相应的消息函数,点“确定”即可。
点开111Doc.cpp文件,里面有相应的消息映射函数定义位置,在函数CMy111Doc::CMy111Doc()里输入以下代码:
m_refColorBKG=0x00808080;
m_hDIB=NULL;
m_palDIB=NULL;
m_sizeDoc=CSize(1,1);
在函数CMy111Doc::~CMy111Doc()里输入以下代码:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);

if(m_palDIB!=NULL)
delete m_palDIB;
在函数BOOL CMy111Doc::OnOpenDocument(LPCTSTR lpszPathName)里/ TODO: Add your specialized creation code here下面添加如下代码:
CFile file;
CFileException fe;

if(!file.Open(lpszPathName,CFile::modeRead|CFile::shareDenyWrite,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);

return FALSE;
}

DeleteContents();

BeginWaitCursor();

TRY
{
m_hDIB=::ReadDIBFile(file);
}
CATCH(CFileException,eLoad)
{
file.Abort();

EndWaitCursor();

ReportSaveLoadException(lpszPathName,eLoad,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);

m_hDIB=NULL;

return FALSE;
}
END_CATCH

InitDIBData();

EndWaitCursor();

if(m_hDIB==NULL)
{
CString strMsg;
strMsg="读取图像时出错!可能是不支持该类型的图像文件!";

MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);

return FALSE;
}

SetPathName(lpszPathName);

SetModifiedFlag(FALSE);
在函数BOOL CMy111Doc::OnSaveDocument(LPCTSTR lpszPathName)里// TODO: Add your specialized code here and/or call the base class后面添加如下代码:
CFile file;
CFileException fe;

if(!file.Open(lpszPathName,CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive,&fe))
{
ReportSaveLoadException(lpszPathName,&fe,TRUE,AFX_IDP_INVALID_FILENAME);

return FALSE;
}

BOOL bSuccess=FALSE;

TRY
{
BeginWaitCursor();

bSuccess=::SaveDIB(m_hDIB,file);

file.Close();
}
CATCH(CException,eSave)
{
file.Abort();

EndWaitCursor();

ReportSaveLoadException(lpszPathName,eSave,TRUE,AFX_IDP_FAILED_TO_SAVE_DOC);

return FALSE;
}
END_CATCH

EndWaitCursor();

SetModifiedFlag(FALSE);

if(!bSuccess)
{
CString strMsg;
strMsg="无法保存BMP图像";

MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);

}
点开ClassView,右键点击CMy111Doc类,点Add Member Variable出现添加成员变量对话框,在Variable Type下的框中输入变量类型名HDIB,在Variable Name中输入变量名m_hDIB,在Access中选中Public就在CMy111Doc中加入了公共成员变量m_hDIB;同样加入int类型的m_nColorIndex、COLORREF类型的m_refColorBKG公共成员变量,再添加保护成员变量(在Access中选中Protected)CSize类的m_sizeDoc、CPalette*类的m_palDIB变量。右键点击CMy111Doc类,点Add Member Function出现添加成员函数对话框,在Function Type下的框中输入函数类型名void,在Function Declaration中输入函数名InitDIBData(),在Access中选中Public就在CMy111Doc中加入了公共成员函数InitDIBData();同样方法加入void类型的公共成员函数ReplaceHDIB(HDIB hDIB)。在111Doc.cpp中加入函数的代码,InitDIBData()里加如下代码:
if(m_palDIB!=NULL)
{
delete m_palDIB;

m_palDIB=NULL;
}

if(m_hDIB==NULL)
return;

LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)m_hDIB);

if(::DIBWidth(lpDIB)>INT_MAX||::DIBHeight(lpDIB)>INT_MAX)
{
::GlobalUnlock((HGLOBAL)m_hDIB);

::GlobalFree((HGLOBAL)m_hDIB);

m_hDIB=NULL;

CString strMsg;
strMsg="BMP图像太大!";

MessageBox(NULL,strMsg,NULL,MB_ICONINFORMATION|MB_OK);

return;
}

m_sizeDoc=CSize((int)::DIBWidth(lpDIB),(int)::DIBHeight(lpDIB));

::GlobalUnlock((HGLOBAL)m_hDIB);

m_palDIB=new CPalette;

if(m_palDIB==NULL)
{
::GlobalFree((HGLOBAL)m_hDIB);

m_hDIB=NULL;

return;
}

if(::CreateDIBPalette(m_hDIB,m_palDIB)==NULL)
{
delete m_palDIB;

m_palDIB=NULL;

return;
}
在函数ReplaceHDIB(HDIB hDIB)中加入如下代码:
if(m_hDIB!=NULL)
::GlobalFree((HGLOBAL)m_hDIB);

m_hDIB=hDIB;

在CMy111doc.h的
// Attributes
public:
下面加入如下代码:
HDIB GetHDIB() const
{
return m_hDIB;
}

CPalette* GetDocPalette() const
{
return m_palDIB;
}

CSize GetDocSize() const
{
return m_sizeDoc;
}
注意要在111Doc.h前加上#include "DIBAPI.h"语句(在class CMy111Doc:public CDocument语句前)
下面为CMy111View中的函数 void CMy111View::OnDraw(CDC* pDC)中添加如下代码:
BeginWaitCursor();
CMy111* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HDIB hDIB=pDoc->GetHDIB();

if(hDIB!=NULL)
{
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);

int cxDIB=(int)::DIBWidth(lpDIB);
int cyDIB=(int)::DIBHeight(lpDIB);

::GlobalUnlock((HGLOBAL)hDIB);

CRect rcDIB;
rcDIB.top=rcDIB.left=0;
rcDIB.right=cxDIB;
rcDIB.bottom=cyDIB;

CRect rcDest;

if(pDC->IsPrinting())
{
int cxPage=pDC->GetDeviceCaps(HORZRES);
int cyPage=pDC->GetDeviceCaps(VERTRES);

int cxInch=pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch=pDC->GetDeviceCaps(LOGPIXELSY);

rcDest.top=rcDest.left=0;
rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)/((double)cxDIB*cxInch));
rcDest.right=cxPage;

int temp=cyPage-(rcDest.bottom-rcDest.top);
rcDest.bottom+=temp/2;
rcDest.top+=temp/2;
}
else
{
rcDest=rcDIB;
}

::PaintDIB(pDC->m_hDC,&rcDest,pDoc->GetHDIB(),&rcDIB,pDoc->GetDocPalette());
}
EndWaitCursor();
以上是关于图像打开、显示、保存的有关步骤和代码。

在111.cpp文件的InitInstance()函数的ParseCommandLine(cmdInfo);语句下输入语句
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
则启动时不自动打开一个空文档。

显示图像直方图步骤:
1、 点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”
2、 在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST。这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID设为IDC_HISTSHOW;
3、 快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。
4、 在Hist.h文件“public:”下面输入如下变量定义:
LONG m_lCount[256];
char* m_lpDIBBits;
LONG m_lWidth;
LONG m_lHeight;
int m_iIsDraging;
CDlgIntensity(CWnd* pParent = NULL);
5、 打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here”前将如下代码拷贝进去:
unsigned char* lpSrc;
LONG i;
LONG j;
6、 在“// TODO: Add extra initialization here”后将如下代码拷贝进去:
CWnd* pWnd=GetDlgItem(IDC_HISTSHOW);

CRect rect;
GetClientRect(rect);
ClientToScreen(&rect);

for(i=0;i<256;i++)
{
m_lCount[i]=0;
}

LONG lLineBytes;

lLineBytes=WIDTHBYTES(m_lWidth*8);

for(i=0;i<m_lHeight;i++)
{
for(j=0;j<m_lWidth;j++)
{
lpSrc=(unsigned char*)m_lpDIBBits+lLineBytes*i+j;

m_lCount[*(lpSrc)]++;
}
}

m_iIsDraging=0;
7、在CHist::OnPaint()函数“CPaintDC dc(this);”前将如下代码拷如其中:
CString str;
LONG i;
LONG lMaxCount=0;
LONG m_iLowGray=0;
LONG m_iUpGray=255;
在CHist::OnPaint()函数“// TODO: Add your message handler code here”后将如下代码拷如其中:
CWnd* pWnd=GetDlgItem(IDC_ HISTSHOW);

CDC* pDC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();

pDC->Rectangle(0,0,330,300);

CPen* pPenRed=new CPen;

pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));

CPen* pPenBlue=new CPen;

pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0,255));

CPen* pPenGreen=new CPen;

pPenGreen->CreatePen(PS_SOLID,1,RGB(0,255,0));

CGdiObject* pOldPen=pDC->SelectObject(pPenRed);

pDC->MoveTo(10,10);

pDC->LineTo(10,280);

pDC->LineTo(320,280);

str.Format("0");
pDC->TextOut(10,283,str);
str.Format("50");
pDC->TextOut(60,283,str);
str.Format("100");
pDC->TextOut(110,283,str);
str.Format("150");
pDC->TextOut(160,283,str);
str.Format("200");
pDC->TextOut(210,283,str);
str.Format("255");
pDC->TextOut(265,283,str);

for(i=0;i<256;i+=5)
{
if((i&1)==0)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,284);
}
else
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,282);
}
}

pDC->MoveTo(315,275);
pDC->LineTo(320,280);
pDC->LineTo(315,285);

pDC->MoveTo(10,10);
pDC->LineTo(5,15);
pDC->MoveTo(10,10);
pDC->LineTo(15,15);

for(i=m_iLowGray;i<=m_iUpGray;i++)
{
if(m_lCount[i]>lMaxCount)
{
lMaxCount=m_lCount[i];
}
}

pDC->MoveTo(10,25);
pDC->LineTo(14,25);
str.Format("%d",lMaxCount);
pDC->TextOut(11,26,str);

pDC->SelectObject(pPenGreen);

pDC->MoveTo(m_iLowGray+10,25);
pDC->LineTo(m_iLowGray+10,280);

pDC->MoveTo(m_iUpGray+10,25);
pDC->LineTo(m_iUpGray+10,280);

pDC->SelectObject(pPenBlue);

if(lMaxCount>0)
{
for(i=m_iLowGray;i<=m_iUpGray;i++)
{
pDC->MoveTo(i+10,280);
pDC->LineTo(i+10,281-(int)(m_lCount[i]*256/lMaxCount));
}
}

pDC->SelectObject(pOldPen);

delete pPenRed;
delete pPenBlue;
delete pPenGreen;

8、点开ResourceView中的Menu,出现IDR_MAINFRAME和 IDR_MY111TYPE,双击IDR_MY111TYPE就出现了程序界面,有文件、编辑、查看、窗口、帮助按钮。点“查看”下面的虚线框右键——点“属性”,输入标题(直方图),和ID(大写英文,如ID_VIEW_HIST),这样就将按钮和程序通过ID联系起来了,点击该按钮,就会执行相应的程序。下面为该按钮添加函数:点Ctrl+W ,出现MFC ClassWizard对话框,选Class name为CMy111View,在Object IDs对应的选项中选中设置的ID(如为ID_VIEW_HIST),在Messages选项中选中COMMAND,然后点击“Add Function”按钮,选默认设置,就为ID_VIEW_HIST添加了相应的函数OnViewHist()。该函数在111View.cpp文件中定义,在函数void CMy111View:: OnViewHist()添加如下代码:
// TODO: Add your command handler code here
CMy111Doc* pDoc=GetDocument();

if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}

LPSTR lpDIB;
LPSTR lpDIBBits;

lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());

lpDIBBits=::FindDIBBits(lpDIB);

if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持查看256色位图灰度直方图!","系统提示",MB_ICONINFORMATION|MB_OK);

::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());

return;
}

BeginWaitCursor();

CHist dlgPara;

dlgPara.m_lpDIBBits=lpDIBBits;
dlgPara.m_lWidth=::DIBWidth(lpDIB);
dlgPara.m_lHeight=::DIBHeight(lpDIB);
// dlgPara.m_iLowGray=0;
// dlgPara.m_iUpGray=255;

if(dlgPara.DoModal()!=IDOK)
{
return;
}

::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());

EndWaitCursor();

『贰』 加密货币资讯

如果你没有做好承受痛苦的准备,那就离开吧,别指望会成为常胜将军,要想成功,必须冷酷!

--[美]索罗斯


Polygon推出新部门Polygon Studios工作室,推进区块链 游戏 和NFT工作

7月20日,以太坊扩展方案Polygon推出新工作室Polygon Studios,推进其区块链 游戏 和NFT工作。Polygon Studios的核心目标包括:确立Polygon在去中心化 游戏 领域的领导者地位;创造一个能够吸引开发者和投资者进入其NFT生态系统的品牌;帮助将Polygon定位为过渡到Web3.0的首选平台。

其中Polygon Gaming Studio旨在帮助开发者创造和运营去中心化 游戏 。而Polygon NFT Studio则用于帮助品牌和知识产权所有者推出定制的数字收藏品和市场。

Fantom研究人员提出智能合约链下执行和测试解决方案

据官方消息,智能合约平台Fantom的研究人员在Usenix2021年度技术会议中,展示了一种专注智能合约链下执行和测试的全新解决方案,其效率将高于现有的解决方案。目前,开发人员测试智能合约需要用三个方案:存档节点、全节点或测试网,其中每一种都可能受到扩展性、速度和存储的限制。为了解决这些问题,Fantom的研究人员提出了一个建立在交易“记录和重放”机制的链下测试环境,开发者在此环境中就能重放交易,而不依赖于以前的交易和区块链的整个世界状态。在针对900万个区块样本集的测试中,“记录和重放”模型将所需的存储量减少了50%。

Chainlink预言机上线Avalanche主网,推动高级DeFi App开发的快速发展

据官方公告,Chainlink Price Feeds已经上线Avalanche主网,Avalanche平台的开发人员将能无缝流畅获取各资产类别最安全、最优质的价格数据。Chainlink的Price Feeds机制将赋能智能合约开发者在Avalanche的开源平台上自由搭建高级DeFi应用程序,应用场景如价格敏感的衍生品市场、低成本借贷应用、高通量交易策略等。

"Chainlink为各区块链和Dapp建立了预言机和数据的标准,Avalanche平台上的DeFi一直非常活跃且快速发展,但Chainlink的数据将为整个社区带来巨大的发展机遇,并且进一步扩大Avalanche作为技术最为领先的加密货币平台的领先优势。" ——Ava Labs创始人及CEO Emin Gün Sirer教授

Solana基金会等合作启动创作者基金,旨在将下一波音乐家、艺术家等引入加密货币领域

官方消息,Solana基金会与去中心协议Metaplex、基于区块链技术的音乐共享平台Audius Music合作以启动一个创作者基金(Creator Fund),旨在将下一波音乐家、艺术家等引入加密货币领域。

Defi锁仓及主要板块情况

MakerDAO将转向完全去中心化,基金会将在未来几个月内解散

Maker基金会宣布,将把业务完全移交给其去中心化自治组织(DAO)MakerDAO,正如其创始人Rune Christensen长期以来所承诺的那样。Christensen在博客文章中透露,Maker基金会将在未来几个月内正式解散,但没有提供更具体的时间表。Christensen写道,“我期待着再次成为一名独立的社区成员和Maker论坛的参与者。”

Aave社区105名参与投票者全数同意在Aave V2添加DPI作为抵押品

去中心化借贷协议Aave社区发起的在Aave V2中添加DPI (DeFi Pulse Index)作为抵押品的提案,投票已结束,105名AAVE持有者参与投票,100%同意添加DPI作为抵押品。提案中表示,DPI是一个资本化加权指数,跟踪整个市场的DeFi资产表现,用户能够通过单笔交易获得一篮子DeFi协议,并且DPI包含14种代币,其低波动性和多样性是抵押品的重要属性,提议在Aave V2添加DPI作为抵押品。若该提案最终实施,Aave将成为第一个将指数产品集成到其平台的借贷协议,添加DPI作为抵押品也会将其他用户带入Aave生态。

Circle披露USDC储备透明度:USDC总流通量与以美元计价的储备资产1比1锚定

美元稳定币USDC发行机构Circle在发布的透明度报告中指出,致同会计师事务所(Grant Thornton)出具的储备证明报告显示,Circle的USDC的总流通量仍与以美元计价的储备资产1 比1锚定,另外,自2021年初以来,USDC流通量已增长2600%以上。

致同会计师事务所发布的USDC储备报告显示,61%的USDC代币由现金或现金等价物支持,另外还有一定比例的扬基存单(Yankee CDs)、美国国库证券等。

Reddit与Arbitrum合作扩展其基于以太坊的社区积分系统

Reddit正在与以太坊Layer 2扩容解决方案Arbitrum合作扩展其基于以太坊的社区积分系统。Reddit周四表示,Arbitrum击败了其他21名竞争者,其他被考虑的项目包括Solana、StarkWare和Polygon等。据悉,Reddit的社区积分是ERC-20代币,Reddit用户可以通过发表高质量评论或其他贡献来赚取这些积分,可用于购买专属徽章、自定义表情符号和GIF等。据报道,升级会将Moons和Bricks代币从测试网迁移到以太坊主网,但交易将通过扩容解决方案Arbitrum进行。

以太坊扩容方案SKALE推出SKALEIMA跨链桥,以实现以太坊和SKALE资产跨链

据官方消息,以太坊扩容方案SKALE推出SKALEIMA跨链桥,允许用户在以太坊和SKALE网络之间转移包括ERC20代币、ERC721代币、ERC1155代币等数字资产以及通用消息数据。当用户将资产从以太坊跨链至SKALE网络时,SKALEIMA跨链桥通过将以太坊上资产存入合约,并在约10个区块确认后,在SKALE网络中通过代理调用SKALETokenManager来传输跨链信息实现资产跨链;反之,则将SKALE网络上的资产销毁并在以太坊合约中释放资产。SKALE表示,该跨链桥具有安全、快速、去中心化、低成本等优势。

NFT平台Autograph与狮门影业、DraftKings达成战略合作,将开发饥饿 游戏 、暮光之城等IP

据prnewswire 7月21日报道,由橄榄球运动员Tom Brady创办的NFT平台Autograph宣布与狮门影业(Lionsgate)和数字 体育 娱乐 公司DraftKings达成战略合作关系。Autograph将与多位 体育 明星建立多年的独家NFT合作关系,包括老虎伍兹、韦恩·格雷茨基、德里克·基特、内奥米·大阪和托尼·霍克等,他们将加入Autograph的顾问委员会。而狮门影业将以几个标志性的电影和电视版权启动Autograph的 娱乐 业务,包括疾速追杀(John Wick)、饥饿 游戏 、暮光之城、广告狂人等。

NFT市场平台OpenSea完成1亿美元B轮融资,a16z领投。

NFT市场平台OpenSea完成由Andreessen Horowitz(a16z)领投的1亿美元B轮融资,投后估值15亿美元。据DuneAnalytics数据统计,OpenSea 6月成交额达1.49亿美元,成交量达21万件,均创 历史 新高,此外,OpenSea总用户数量突破14万,环比增长19%。此前消息,今年三月,OpenSea完成2300万美元的A轮融资,a16z领投,Cultural Leadership Fund参投,以及Ron Conway、Mark Cuban、Tim Ferriss、Belinda Johnson、Naval Ravikant、Ben Silberman等众多天使投资人也参与了本轮投资。

NFT资产浏览器NFTSCAN宣布发布公测版

NFT资产浏览器NFTSCAN宣布对外发布公测版,在可控范围内进行一次公开测试使用。

据悉,NFTSCAN是基于以太坊网络的NFT资产浏览器产品,测试阶段已收录40个热门NFT项目,例如OpenSea、Rarible、CryptoPunks、Meebits、AxieInfinity等。截至7月22日,NFTSCAN已收录147万个NFT资产、223个NFT合约地址、1010万条NFT相关的链上记录,以及217万个相关钱包地址。此外,今年4月底,NFTSCAN获得55万美元种子轮股权融资,由元宇宙资本领投。

PeckShield派盾:去中心化跨链交易协议THORChain遭攻击

7月23日,PeckShield派盾预警显示,去中心化跨链交易协议THORChain遭攻击,请用户注意风控。

事件发生后,项目方披露了更多攻击细节,称这次攻击针对ETH路由,损失800万美元,攻击者“有意限制了攻击造成的影响,似乎为白帽所为”。THORChain上的ETH路由目前已经暂停,由审计专家进行评估后再决定是否开放。THORChain称,攻击者要求10%的悬赏金,如果可以联系到攻击者,团队乐意提供相应的奖金。THORChain还表示:项目自有资金可以弥补该损失,受影响的ERC-20资金池的流动性提供者将会给予补偿。

DeFi项目array finance官方:闪电贷造成超50万美元损失,或为一名内部人员所为

官方消息,DeFi项目array finance证实遭到闪电贷攻击,官方表示,攻击者获利约272.94 ETH,价值约51.5万美元。array希望找到一家公司或组织,为失去的流动性提供担保,并在启动后偿还。此外,array表示,将Gismar从团队中除名,因为团队认为他的疏忽和粗心导致流动性被偷,或者他自己偷了钱。目前正在积极尝试联系和联络Gismar,但他的所有社交媒体已经关闭和清空。array下一步将用剩余的资金雇佣一个可靠的开发人员;解决手头的问题,这样就可以继续目前的工作;试着找个人为70万美元做抵押;采取法律行动。

灰度CEO:100%致力于将GBTC转换为ETF

据cointelegraph 7月19日消息,灰度首席执行官Michael Sonnenshein表示,一旦条件合适,该公司“100%致力于”将其比特币产品GBTC转换为ETF。他认为:“在我们的席位上,从我们的世界来看,我们确实在寻找基础市场的几个不同的成熟点,这确实是我们认为监管机构批准这些类型产品所需的最后阶段并为投资者提供他们正在寻找的保护”。

上周,灰度宣布与美国银行业巨头纽约梅隆银行建立合作伙伴关系,后者将在GBTC经历转换后为其提供服务。

马斯克:持有比特币且不会卖,特斯拉很可能继续接受比特币支付

7月22日消息,特斯拉CEO马斯克昨晚在参与B Word活动时透露说,可能会再次接受消费者用比特币购买 汽车 。马斯克表示:“看起来比特币正在朝着可再生能源转变,可再生能源的使用率,很可能达到或者超过50%,照趋势看数字还会上升。如果真是这样,特斯拉极可能会再次接受比特币支付。”

V神:以太坊需要扩展到制造代币之外

7月21日消息,以太坊联合创始人V神(Vitalik Buterin)在以太坊社区活动EthCC上表示,以太坊 (ETH) 已超越DeFi,成为其第一大用例,该网络向前发展的时候到了。V神称:“以太坊生态系统需要扩展,而不仅仅是制作有助于交易其他代币的代币。扩展已经在某种程度上发生了,但我们可以做得更多。”例如,以太坊可以帮助重塑社交媒体细分市场。去中心化治理 (DeGov) 是以太坊 (ETH) 网络扩展的另一个用途。最后,V神承认,他对数字收藏品或NFT领域的现状感到失望。他希望NFT能够造福更广泛的 社会 ,而不仅仅是名人。

#比特币[超话]# #数字货币# #欧易OKEx#

『叁』 稳健的十倍收益 - 浅谈币圈平台币估值逻辑

币圈熊了许久,早已没了往日的喧嚣,社群冷清、成交量萎靡、币值缩水。熊市时多学习,牛市才能多收获。

无论是传统投资大佬巴菲特还是币圈大佬李笑来,都强调只投资自己熟悉的领域。只有了解自己的投资选择,才可能不被割韭菜。

五花肉认为币圈最稳妥的投资有 2 种,一种是诸如 BTC、ETH、EOS 之类的主流币,共识强,技术过硬,团队踏实做事;另一种就是平台币了,有清晰的盈利模式,可以使用传统金融的估值方法来判断其价值。

普通的加密货币可以从技术、团队、社群等维度分析,平台币则可以用传统金融的估值分析方法来判断其价值。

所以今天五花肉带大家解析一下平台币的估值逻辑。

平台币是币圈交易所发行的加密货币,通常具有抵扣交易手续费、享受分红等权利,有些交易所还会定期回购自己发行的平台币。目前市面上主要的平台币有币安发行的 BNB,火币发行的 HT、OKex发行的 OKB、畅思发行的 CET 等。五花肉发现,论区块链思维,中国人是贯彻最好的,发行平台币的多是具有中国背景的交易所。反观非中国的交易所,更偏向于传统融资。比如美国的 Coinbase,估值 80 亿美金。韩国 TOP2 交易所 Bithumb 2018 年 10 月刚以 3.5 亿美元的价格将 50% 股权出售给新加坡财团,整体估值约为 7 亿美金。

我们来对比下传统金融交易所和币圈交易所。

从盈利能力和交易额来说,币圈交易所完全可以和传统金融交易所媲美。但是估值却远不如传统交易所,传统交易所 PE在 20-30 区间,PV 在 0.07-0.1 区间,均为币圈交易所的 10 倍左右。币圈交易所的 PE 平均为 2-3,PV 平均为 0.005-0.007。所以按照传统估值理论,币圈平台的估值可以说是很低、很值得投资了。许多专家说 A 股处于估值的底部,它目前 PE 约为 12.94。而币圈的优秀企业的 PE 仅为 2 至 3。

值得注意的是,Coinbase 的估值走在了众兄弟的前面,Coinbase 作为最官方的币圈交易所,与传统金融联系也最为密切,所以估值最符合传统金融理论的定价。嗯,当中我选择了畅思交易所作为反面典型,无论是 PE、PV 都是极度高估的。

 *数据来源于网络。

**传统证券交易所数据为2017年,市值为2018年10月13日写稿实时价格。

***币圈交易所交易额以近期每日交易额估算。币安/火币/OK/畅思年利润以回购或分红的金额估算。Coinbase 及Bithumb年利润以0.0025的利润交易额比(EV)推算。

币圈交易所的低估值可能由于未来极大的不确定性。由于各国监管政策不明,非国家背书或许可的币圈交易所能否长期存在,尚存疑问。如果这几家币圈交易所得到国家的支持,估值一定会与传统交易所持平。另一方面,区块链技术及投资市场的不确定,也极大影响着估值。如果今后加密货币投资能成为与股票一样的投资选择,那估值也会显著提升。

如果你相信区块链的未来,平台币就是币圈投资比较放心而且收益颇丰的投资选择了,长远来看,可能会有10倍的收益。

『肆』 关于以太坊ETH合并的错误观点理清

随着合并的临近,越来越多的文章在向人们发出信号:它确实快要临近了。这也带来了和 PoS 相关的一系列问题的讨论,人们在反复讨论着同样的话题和同样的误解。在上周 Kiln 测试网成功合并时,我已经在一定程度上看到了这一状况,今后我们还会看到更多类似的东西,所以我将一些常见的问题、观点归纳如下。

每当看到有人提出这些观点时,我就可以把这篇文章分享给他,我希望大家也可以这样做。如果本文存在一些纰漏,还望斧正或提出补充建议。

什么是合并?

更多的信息可以在 ethmerge.com 上找到,所以本部分将简单介绍。

在合并之后,Ethereum 将采取 PoS(股权证明)而不是 PoW(工作量证明)共识。合并并非「ETH 2.0」、也不存在「ETH 2.0」,这已经是一个过时的术语。

如果是 ETH 持有者,则不需要做任何事情。合并后你仍将持有相同数量的 ETH,没有「ETH2 币」,也不需要进行任何迁移。一切都完全相同,只有共识机制发生了变化。

之所以被称为「合并」,是因为 ETH 将信标链(共识层)与现存的链(执行层)合并,并抛弃了执行层的 PoW 部分。

解释一下,「共识」只是一个花哨的词汇,其含义是指如何对交易进行排序并保证安全性。PoW 和 PoS 都是实现共识的不同手段。

PoW:"打乱区块顺序的成本太高了,因为按规则办事更划算。"

PoS:「扰乱区块顺序的成本太高了,因为如果我这样做就会失去我抵押的所有钱。」

由于只是共识机制的改变,PoS 本身并不会大幅降低 Gas 费用。

为什么合并?

降低安全成本,因为达成共识所需的能源更少。

对于 PoW 来说,收益需要为矿工使用的所有硬件和能源买单,否则将无人再去挖矿。这就需要大量发行并迅速卖出 Ethereum 以换取法币来支付账单。

而 PoS 则不然,PoS 只需要支付给投机者一些收益,让人们愿意存入资本,而不是直接投资到其他地方。除了一台普通的电脑和互联网连接之外,并不需要支付大额账单。所以收益率只需要反映所涉及的机会成本和风险。

更具可持续性。

一条链的安全性基本上与它的市值成正比。无论是 PoW(更高价值的 Token 奖励 = 更有理由按规则行事 = 更多的矿工 = 更难以破坏共识)或 PoS(更高价值的抵押 Token = 更有理由按规则行事以避免失去抵押品)都是如此。

新发行的 Token 本质上是将价值从所有持币人身上转移走,并重新分配给特定的人。在其他条件相同的情况下,将这些 Token 卖出可以从网络中提取价值。

这为未来的许多扩容解决方案打开了大门:数据分片、无状态、轻客户端等等。

通过分离执行层和共识层,这将有助于降低未来的代码复杂性。

安抚环境和 游戏 玩家当然是一个积极的副作用,但这并非是切换到 PoS 的主因。切换更多是由于外部因素导致的,Ethereum 作为一个协议并没有对整个网络太多的控制权,例如能源生产、GPU 供应链等等。

何时合并?

目前官方尚未公布日期。综合各方面的原因,开发者和社区对 6 月中旬合并持谨慎乐观的态度

目前仍在测试之中,在开发人员完全确信不会出现错误之前,不会进行合并。

我个人不把希望寄托在 6 月,但我认为至少也会在夏季完成,除非在测试过程中出了极大的问题。例如,出现一个需要几周时间来修复的关键错误,或者规范本身存在需要几个月时间来修复的漏洞。

难度炸弹被设置在 6 月,所以无论届时是否进行合并,都将进行一次硬分叉。

建议将 wenmerge. com 存入书签,以便快速查看测试网合并的最新预估。

流传已久的错误观点

观点:「你这个白痴!开发团队会像过去一样拖延,早在数年前他们就应允合并了,但至今仍未兑现。」

首先是一些说明:现在仍未宣布正式的合并日期,此前也从来宣布过。一个本就不存在的最后期限,何来的拖延之说呢?

类似于「将在 2018 年转换为 PoS」的说法来自于极端乐观的态度,并且低估了 PoS 设计的复杂性和从 PoW 到 PoS 的安全过渡的复杂性。此前开发者所做的工作相当于部分完成了 Casper FFG 规范(一个混合 PoW 和 PoS 的机制),但它最终被废止了。现状已经存在很多不同了:

经过多年的研究、对潜在的攻击方向进行分析,现在拥有一个完整的协议规范。

客户端已经实现,现在只差测试尚未进行。

合并时所有人都在工作,除了合并外没有其他工作。合并所需的必要步骤都已完成。这甚至不是「他们已经完成了像 EIP1559 这样复杂的内容,所以现在可以把更多的注意力集中在合并上」,而是:「他们把所有的注意力都集中在合并上」。不可能会出现这种状况:因为开发者需从事其他内容的工作而导致合并再次被推迟。在合并完成之前,他们没有其他事情可以做。

自 2020 年 12 月以来,PoS 实际上正在以信标链的形式运行。这意味着以太坊的 PoS 已经在生产环境中进行了一年多的测试(在一定程度上),目前有超过 1000 万 ETH 在运行。它只是还没有为执行层生产区块而已。

观点:「数以百万计的质押 ETH 将在解锁的那一刻崩盘。」

可以肯定的是,会有大量的锁仓者想要最终获利,尤其是那些在 32 个 ETH 仅价值 1 万美元时就锁定了 ETH 的人。但从一角度来看,还有很多需要考虑的问题。

合并并不会解锁任何 ETH。解锁将在合并后的第一次硬分叉中进行,可能是 6-8 个月后。这意味着数个月内都将没有 PoW 方式增发的 ETH(约 13000 ETH/天)被抛售,也没有 PoS 增发的 ETH 进入流通。

就像存 ETH 要排队一样,取 ETH 也要排队。假设发生大规模抛售事件,每个人都将处于排队之中,以每天 1125 名的速度依次解锁。所以不存在 "开闸放水 "的时刻。每个人解冻都需要一年多的时间,一年的时间里,每天有约 38000 个 ETH 进入流通领域(大约是日均量的 1%)。

合并后,验证者也将开始收到费用奖励,有预估表明收益率或将翻倍。现在有成千上万的人在排队等待进入质押。他们既然可以接受 5% 的 ETH 收益率,我不认为他们会在收益率变成 10% 的时候放弃存入。

到目前为止,抵押所涉及的最大风险是合并本身。一些灾难性的事情可能会导致合并出错,尽管存在这种风险、尽管 ETH 被锁定到一个未知的未来日期,但人们已经锁定他们的 ETH 一年多了。有多少人或机构还愿意袖手旁观、等待这种风险消失后再进入呢?

抵押者退出就意味着更少的验证者,这意味着对不退出的抵押者有更高的奖励。这也意味着更能激励其他之前未投资的人开始投资......

当然,这是加密世界,让加密归于加密。合并将带来兴奋和波动,可能会出现「sell the news」的跌幅,谁又知道呢?我不会假装预知未来,但在我看来,更多的 ETH 可能会流入、而不是流出锁仓。

观点:「如果 PoS 这么好,Ethereum 为什么不从一开始就这样做呢?」

PoW 很容易概念化并实现,PoS 则不然。当我们回到 2014 年,PoS 尚是一个仍在研究的理论概念,只有一些区块链实施了它的某种特定版本。

在考虑实施 PoS 之前,需要从研究角度解决一些基本问题。

没有放之四海而皆准的 PoS。每个 PoS 区块链都有自己的 PoS 规范,在各方面都有优缺点,所以这并非是「这个链做到了,为什么 Ethereum 不能做同样的事情」这样简单。

以一个 PoW 链作为开始,让任何人都可以在无需许可的条件下开采 crypto,这让 crypto 的分发机制比那些最初就是 PoS 的链要好得多。因为那些链从最初就是 PoS,这样必须决定如何分配初始 crypto,而不是无需许可的分发 Crypto。

Ethereum 存在预挖、预售,但经过多年的换手,现在已经稀释到一半左右,使其分布更接近 BTC 的分布。所以在 2022 年,当 ETH 作为流动性极强且易于获得的资产时,这并不是什么大问题。

观点:「这实际上只是在多年努力后最后一次坑害矿工的伎俩。」

从第一天起,PoS 就是最终的目标,每个人在挖矿时都知道它早晚有一天会结束。这里并没有什么不公正的事情发生。

经济因素胜过任何形式的矿工对链的忠诚度。你可以把一条链看作是一个企业,把矿工看作是雇员。

矿工/雇员已经为他们提供的服务(即安全共识)获得了区块奖励。工资由雇主支出,它来自于稀释现有持币者的价值。

矿工流向提供奖励最高的链,如果有另一个可由 GPU 开采的 crypto 可以提供更多的奖励,大多数矿工会立即抛弃 Ethereum。

类似地,如果验证者能够以更低的价格完成它所需要的服务,那么 Ethereum 将支付更少的费用。

这并不完全是排他性的。矿工也可以 ETH 的持有者,以及区块链的使用者。没有什么能阻止他们成为抵押者并获取抵押奖励。

观点:「如果挖矿没有花费现实世界的能源,则这枚 crypto 就不再具有内在价值。」

我不太相信这种说法。反复计算哈希值直到找到一个符合任意要求的哈希值,这并没有什么神奇之处。我的意思是,PoW 的区块链其工作是通过解密来完成的,但这并不意味着解密本身就能为世界带来价值。提高一个 Crypto 的挖矿难度并不会神奇地让每个人都变得更富有,它只会让挖矿的利润降低(当然,如果对这种 Crypto 的需求量也上升则不然)。

在我看来,一个币的价值最终来自于供给和需求,而需求来自于区块空间的价值。无论 ETH 是由矿工还是锁仓者生产的,人们都需要 ETH 来购买区块空间。当然,矿工越多,安全性/去中心化程度越高,这进一步增加了区块空间的价值主张,这是一个正反馈循环,但反馈循环也存在于 PoS 的 Ethereum 中,它也同样酷。

观点:「PoS 是中心化的不二法门。」

PoS 与 PoW 基本相同,但又存在差异。「更好」或「更坏」只取决于你的看法。在我看来,PoW 实际上只是 PoS 的额外步骤。

Ethereum 作为一个社区高度重视去中心化,任何潜在的中心化趋势都会被研究团队注意到并提出缓解的方法,即使是以其他重要的东西为代价,就比如可扩展性(保持低 Gas 限制以便更多的节点可以参与其中,即使这会导致拥堵和高费用)。

尽管目前存在一些缺点,但去中心化是一个缓慢的过程,我们还没有到那一步。目前有许多中心化的拐杖从长远来看是需要消失的。我个人认为,想出一大堆东西来解决某个问题比「放弃并说因为某问题而不能做」要吸引人得多。

Ethereum 的 PoS 有一些有趣的设计经常被忽视。单个验证器瘫痪、捣乱或直接攻击网络都不会受到很严重的惩罚。而一千个验证器同时这样做则会受到更严重的惩罚。

这意味着,如果你是一个拥有数千个验证者的大型企业,为了你自己的利益,应该把它们去中心化,避免使用云主机、使用不同的客户端等等。当然,资本仍然是集中的,但至少故障点是去中心化的,这对网络的整体 健康 是有利的。

与依靠中心化摊销成本的大型矿业相比,通过能源更容易发现 PoW 挖矿并被当局关停。在全世界范围内移动采矿设备是很难的,但锁仓则不需要,不需要消费级设备以外的任何额外硬件。

观点:「PoS 实际上就是『越有钱赚得越多』。」

是的。不幸的是,我们生活在一个财富高度不平等的世界。blockchain 并不能解决这个问题。

可这也是 PoW 的真实情况。谁有钱谁就可以买更多的矿机、赚更多的钱。在矿业,投资回报率也在随着规模经济的发展而变得更好。集中式的采矿作业可以获得更好的硬件折扣、并搬到电力便宜的地方。独立小矿工在现实中根本无法与之竞争。有了 PoS,每个人都能按比例获得相同的收益,无论他们的股份是 10 美元还是 1000 万美元。

它可能是中心化,但那些大的采矿业务没有理由攻击网络并削弱它,因为他们在基础设施上投入了数百万美元。所以……或许你对大型中心化主体的存在没有意见,只是对他们在网络中存在巨大利益而不满?

观点:「存款被动产生利息,这是在无中生有地印钱?这简直就是中央银行和法币的翻版!」

验证者仍在进行着「工作」:创建区块和验证其他区块。只是这些工作完全由 blockchain 达成共识所需的实际有用的工作组成,而不是一遍又一遍地计算哈希值。

这并不是真正的 "凭空印出的免费的钱",这些资金仍然有成本,它们只是比能源账单更抽象、更不直观而已。他主要存在于下面几个成本:

机会成本:如果另一项投资能给你带来更好的收益,为什么还要赌?

流动性差:从你存款的那一刻起资金就被锁定了。你需要排队等待你的验证器激活,而当你取款时,又要排队才能取回。

固有风险:这仍然是一个相当新事物,可能会出现问题:一个关键错误、网络被攻击、你的抵押物受损等等。

波动性:这仍然是一种不稳定的资产,如果你以本国法币计价,那么使用一种可能一夜之间下跌 30% 的资产来获取 5% 的收益率并不是那么好。

维护:验证者需要维护验证器、更新软件等,以此来确保 100% 的正常运行时间。

这就是它有趣的地方:越多的锁仓者、每人的奖励就越低。这也意味着所有成本都将交由市场本身定价。如果质押收益率太低,那么奖励就不能证明成本的合理性,人们就会撤出并投资于其他地方,这一举动会使收益率回升。同样,如果收益率太高,也会吸引更多的资本使收益回落。

就通货膨胀而言。假设市场认为 5% 是理想的收益率,其中 3% 来自增发。这样算下来,每年大约有 3000 万个 ETH 被抵押,将发行 90 万个新 ETH。在总供应量为 1.2 亿 ETH 的情况下,通货膨胀率为 0.75%。只要 Gas 费用高于 23gwei,EIP1559 燃烧的 ETH 就将超过这一数量。我要强调的是,Ethereum 很快就会成为一种带有收益的通缩资产。

「ETH 一直没有供应上限,且他们一直在改变货币政策。」

多年来,Ethereum 的目标一直是「确保网络安全的最低可行发行量」,将网络安全置于控制供应上限之上。对货币政策的任何更新都没有增加供应通货膨胀。从第一天起低通胀率就一直是目标。

一旦 EIP1559 的燃烧率与发行率相匹配,就会有一个作为有效供应上限的平衡点——再次由市场力量决定对 Ethereum 区块空间的估值。

并不存在一个 "Ethereum 中央银行 "任意调整利率并向亲信印钞。市场本身决定了有多少通货膨胀/通货紧缩,并不存在一个可以像中央银行控制法币通货膨胀率那样的实体控制 Ethereum。

观点:「巨鲸有足够的钱来接管和改变 游戏 规则,并打击诚实的锁仓者。」

不,Ethereum 没有任何形式的链上治理。

协议更新是社区的努力(Layer 0),你不需要锁仓 ETH 来提出不良的提案、参与协议更新。

这一过程与 PoW 完全相同。即使你拥有 99% 的算力,你也不能在没有私钥的情况下进行无效的交易、窃取他人资产、改变协议规则,或者除了重组区块之外真的做些什么。1% 的诚实节点将拒绝任何不遵守规则的区块,你将在一个无效的/无用的链上挖矿。现在把「哈希算力/挖矿」换成「质押金额/锁仓」,PoS 也是如此。不过不同的是,被发现重组区块的人将被销毁他们的整个权益,而链不能完全摧毁采矿机。

简单地说,这涉及到大量的 ETH。在合并之前高达 1000 万计数的 ETH,约合 300 亿美元。锁仓的 ETH 数额和 ETH 的价值预计都会上升,所以攻击变得越来越不可能,因为做一次攻击所涉及的经济成本太高了。而且如果攻击来自外部行为者,他能够获得这么多 ETH 就是很荒谬的,你在哪里能买到 1000 万 ETH 来拥有 51% 的股份?

观点:「32 个 ETH 太多了,普通人没有这么多钱。」

我同意这是一个很大的问题。之所以有这么高的数字,是因为它必须落在一个技术的平衡点上:它必须低到有充足的验证者来保证链的安全,但又要高到避免验证者太多以使链的开销膨胀。

从技术角度来看,有一大问题涉及到 32ETH,当时 32ETH 价值约 7000 美元。2017 年的早期曾有人甚至建议最低超过 1000ETH。

值得庆幸的是,就像矿池的存在一样,也有锁仓池,允许用户以小金额参与锁仓。这归功于像 RocketPool、Secret Shared Validators 这些使用智能合约的无许可、去中心化的非托管协议。而且由于上面提到的二次惩罚,我相信从长远来看,去中心化的锁仓操作会比中心化的要好。像 Rocket Pool 这样的协议最好被看作是基础锁仓的高级抽象,而不是 "只是一个锁仓池"。

观点:「PoS 还没有被证明,而我们知道 PoW 是有效的。」

这实际上是完全公正,显然我们无法真正的反驳这一点,只有时间会证明。只是我认为在 Ethereum 正在转向 PoS 的背景下,这是无关的。如果你不相信它,就不要参与/投资它。我个人相信一个长期可持续的 PoS Ethereum,但即使如此,我也乐于见到 bitcoin 继续沿用它的 PoW。

这都是我们一生中伟大的 crypto 实验的一部分。PoS Ethereum 要么只是一阵风,失败直至默默无闻,要么将成功地创造出能够超越人类的怪物般的强大网络。

我在 bitcoin 和 Ethereum 中看到,为了实现这一目标,优先考虑去中心化是关键。尽管两者的理念大不相同,但我很高兴能同时拥有这两种东西,以真正看到长期的价值。

『伍』 以太坊基金会:ETH将在未来几个月转向PoS 能源消耗至少减少99.95%

长话短说:以太坊在合并完成后的能源消耗至少能减少99.95%。

以太坊将在接下里的几个月完成向权益证明(PoS)共识机制的过渡,这带来了无数种已被理论化的改进。但既然信标链( Beacon chain)已经运行了几个月的时间,我们实际上就可以深入研究具体的数字了。我们很高兴 探索 的一个领域涉及新的能源使用估算,因为我们将结束在共识上花费一个国家所耗能源价值的过程。

截至目前,还没有任何关于能源消耗(甚至使用什么硬件)的具体统计数据,因此下面是对以太坊未来能源消耗的粗略估算。

由于很多人都在运行多个验证器,因此我决定使用可存款的独立地址的数量,来作为今天有多少台服务器的代理数。很多质押者可以使用多个 ETH 1.0地址,但这在很大程度上抵消了那些冗余设置。

在撰写本文时,有来自16405个独立地址的140592个验证器。显然,这是由于交易所和staking质押服务造成的偏差,因此移除它们会导致有87,897个验证器被假定是在家里质押的。作为一个健全的检查,这意味着平均每个家庭质押者运行了5.4个验证器,这对我来说似乎是一个合理的估计值。

能源要求

运行一个信标节点(BN)、5.4个验证器客户端(VC)以及一个以太坊1.0全节点需要多少能量?以我的个人设置为基础,大约是15瓦。Joe Clapis(Rocket Pool开发者)最近运行了10个验证器客户端(VC),1个Nimbus信标节点(BN)以及1个10Ah USB电池组的Geth全节点,然后运行了10个小时,这意味着这个设置平均为5瓦。而一般的投资人不太可能运行这样的优化设置,所以我们取100 瓦作为参考数。

将其与之前的87000个验证器相乘,就意味着家庭质押者的消耗电量约为1.64兆瓦。估计托管质押者所消耗的能源会更多一些,他们运行了成千上万个具有冗余和备份的验证器客户端。

为了简化计算,我们还假设他们每5.5个验证器使用100瓦。基于我所接触过的基础设施团队,这是一个粗略的高估值。真正的答案要少50倍左右(如果你是一个质押托管团队,并且每个验证器消耗电量超过5瓦,我相信我可以为你提供帮助)。

因此,总的来说,采用权益证明(PoS)的以太坊网络会消耗大约2.62兆瓦的电量。这不是一个国家的用电规模,也不是省甚至城市的用电规模,而大约是一个小镇(约2100个美国家庭)的用电规模。

作为参考,当前工作量证明(PoW)以太坊网络所消耗的能量相当于一个中等国家的能源,但这实际上是保持PoW链安全所必需的。顾名思义,PoW达成共识的基础是哪个分叉在这方面做的“工作”最多。有两种方法可以提高“工作”完成率,一是提高挖掘硬件的效率,二是同时使用更多的硬件。为了防止区块链被成功攻击,矿工必须比攻击者更快的速度“工作”。由于攻击者很可能拥有类似的硬件,矿工必须保持大量高效的硬件运行,以防攻击者挖出它们,所有这些硬件都会消耗大量的能量。

在PoW共识机制下, ETH 价格与算力正相关。因此,随着价格的上涨,在均衡状态下,网络消耗的电力也会随之增加。而在PoS共识机制下,当 ETH 价格上涨时,网络的安全性也会提高( ETH 的价值更高),但对能源的需求保持不变。

一些比较

据数字经济学者估计 ,以太坊矿工目前每年要消耗44.49太瓦时的电量,这意味着,根据上述保守估计,PoS的能效提高了约2000倍,这反映了总能源使用量至少减少了99.95%。

如果每笔交易的能耗高于你的速度,则约为35Wh/tx(平均约60K gas/tx)或TV约20分钟的耗电量。相比之下,以太坊PoW每笔交易使用相当于一栋房子2.8天的能量,比特币的每笔交易则消耗相当于一栋房子38天的能量。

展望未来

尽管以太坊目前仍在使用PoW共识机制,但这种情况不会持续太久。在过去的几周里,我们看到了第一批用于合并的测试网的出现(注:The Merge合并是以太坊从PoW切换到PoS时的名称)。几个工程师团队正在加班加点地工作,以确保合并尽快到来,同时又不影响安全性。

扩容解决方案(例如rollup和分片)将通过利用规模化经济来帮助进一步减少每次交易消耗的能量。

以太坊网络超级耗电的日子屈指可数了,我希望这个行业的其他部分也是如此。

『陆』 5月6日灰度持仓报告是多少

截至5月6日灰度持仓数据为:

btc——总计持有:653346btc,24H持仓变化: -35.3109btc,灰度持仓占比: 3.11%

ltc——总计持有:1502940ltc,24H持仓变化: +63.3060ltc,灰度持仓占比: 1.79%

eth——总计持有:3166155eth,24H持仓变化: -216.8008eth,灰度持仓占比: 2.74%

bch——总计持有:293523bch,24H持仓变化: +5.7435bch,灰度持仓占比: 1.40%

etc——总计持有:12398072etc,24H持仓变化: -1019.0985etc,灰度持仓占比: 5.88%

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

『柒』 weth是什么币

WETH是一种符合ERC-20标准以太坊代币。
拓展资料:
1、 含义
与以太坊网络的原生代币以太币(ETH)可以进行互换,可以将1ETH兑换为1WETH,同时也可以将1WETH兑换回1ETH,兑换是基于智能合约完成的。 Golff支持使用WETH挖GOF,所以用户需要提前准备好WETH。
2、 为什么要发行WBTC ?
(1)我们知道,比特币无法直接在以太坊网络使用,而比特币市值长期占比超过50%,如果这部分资金长期闲置,实际上是一种资源浪费,资金的机会成本也不低。即使按照比特币市值的5%计算,可利用的资金高达100亿美元,将这部分资金转移到以太坊网络进行借贷,按照保守6%的年化计算,净利润便是6亿美元。以太坊拥有最好的生态,比特币占据了大量的资金,二者如果能结合起来,可以产生巨大的效益。随着今年以太坊Defi挖矿的走红,WBTC 逐渐浮出水面。
(2)WBTC 全称 Wrapped BTC,字面意思为“有包装的比特币”,是基于以太坊、与比特币挂钩的 ERC-20 代币。由 BitGo、Kyber Network 与 Ren 等区块链项目联合推出,于2019年1月正式上线。该代币在以太坊上发行,实现与比特币 1:1 锚定,是ERC-20版本的比特币,也是BTC的第一个ERC-20版本,目的在于使BTC流动性进入以太坊生态系统。
(3)WBTC采用的是一种托管式解决方案,其中托管者联盟将真正的BTC锁定并发行相应的WBTC代币。只能由具备完整KYC/AML资格的注册商户发起WBTC。其治理通过DAO进行,BTC托管是通过多签合约来保证。
3、为什么说比特币的上涨与WBTC密切相关呢?
(1)流动性挖矿效应刺激WBTC需求增加,WBTC进一步导致比特币需求上涨,从而推动二级市场比特币购买效应增强,导致比特币价格上涨。
(2)因此,本轮比特币价格可以从3800美元反弹至目前15600美元附近,不仅与灰度基金、微策略等国外机构大举购买有关,WBTC也功不可没。
(3)目前,WBTC不仅可以在币安这类中心化交易所购买,也可以在Uniswap、Balancer这类去中心化交易所购买。

『捌』 以太坊设备寿命

以太坊2.0其实包含的内容非常多,例如分片、扩容等,合并只是其中一项内容,自去年2.0信标链启动开始,我们已经处在PoW和PoS双链运行底下,合并是要彻底结束PoW显卡挖矿,全部爆块都用PoS共识来打包,合并后并不代表以太坊2.0就完成,至少还有2-3年时间增加其他功能。

合并这项内容牵涉面广,利益巨大,时间点非常非常非常关键,尤其对矿工而言,那是生死攸关,天天看着这个合并时间点来考虑是否加卡。坦白讲,矿工根本不关心什么分片、扩容,Layer2,Rollup等功能,他们只关心什么时候正式合并,什么时候结束挖矿。

已参与ETH2.0信标链质押的希望合并越快越好,因为他们需要在合并后的第一次硬分叉才能解除质押,而矿工们持有显卡,希望合并越晚越好(最好别合并),把显卡能耐发挥到极致。

两个月前的消息是,合并提前了,并且在合并前,不再有新的EIP功能修订升级,ETH团队所有人员集中全力优先处理合并事宜,合并提案EIP-3675也在8月中由研究员Mikhail正式立案,这标志着合并真的真的真的要进入倒计时了,可惜仍然没有具体日期,只有概率。啥玩意

总结:

随着以太坊总市值以及生态膨胀到今天这个体量,船大难掉头,任何一个小错误,都会引起巨大震荡:矿工手上有显卡,机构手上有币,DeFi生态里有TVL,有多少矿池靠ETH吃饭,有多少炒卖显卡为生的代理商......

如果在这个过程中,平衡不好各方的利益,那么整个网络可能会被冻结,甚至崩溃。我认为以太坊团队在公布合并时间点这件事上太儿戏了,不把矿工的矿机当回事,几个月前开发员Trend说保守估计年底前合并,现在看来又要跳票,官方还有什么可信度?要防止跳票很难吗:至少提前一年,对外公告“准确的合并日期”,以及合并步骤和详情。如果没在测试网通过就不要乱发布各种合并消息,尤其是开发人员。我现在啥都不想看,就等12月的炸弹 pushback 究竟要延到明年几月。到时再来写一篇《如何处理手上的矿机》吧,拭目以待。

『玖』 灰度是什么公司

2014年,SecondMarket公司创始人BarrySilbert将这只比特币投资基金从原公司中脱离出来,成立了灰度投资公司(GrayscaleInvestments)。

2015年,灰度投资公司被归并到新成立的数字货币集团(DigitalCurrencyGroup,简称DCG)旗下。DCG不仅仅专注于数字货币和区块链的投资,同时也是一个初创企业的孵化器。DCG旗下除了灰度投资公司外,还有加密货币场外交易经纪商Genesis、区块链新闻资讯网站CoinDesk两家子公司,以及投资的150多个其他区块链公司/项目。

经过多年的发展,灰度投资公司已经成为全球最大的加密货币资产管理公司,旗下的加密货币信托规模已经达到25.8亿美元。

(9)灰度eth估值方法扩展阅读:

2013年,创始人BarrySilbert说服了SecondMarket公司的董事会,拿出一部分资金成立了名为BitcoinInvestmentTrust的比特币投资基金,这只基金就是灰度投资公司比特币信托(GrayscaleBitcoinTrust)的前身。直到2017年9月,灰度投资公司的比特币信托基金才开始出现爆发式增长。

它已经成为全球最大的比特币投资信托基金,拥有的比特币数量超过40.85万枚,将近比特币总量的2%。除了比特币信托基金,灰度投资公司还推出了BCH、ETH、ETC、Horizen、LTC、XLM、XRP、ZEC的信托基金,以及包含主流币种的复合型加密货币信托基金(GrayscaleDigitalLargeCapFund)。灰度投资公司的加密货币信托产品,为机构用户购买加密货币提供了便利。

热点内容
比特币矿工是谁都可以做的吗 发布:2025-06-22 15:40:02 浏览:797
歌尔元宇宙 发布:2025-06-22 15:39:49 浏览:945
btc合约和现货 发布:2025-06-22 15:25:17 浏览:304
58同城区块链在哪里下载 发布:2025-06-22 15:22:29 浏览:416
区块链的前景GCE 发布:2025-06-22 15:22:22 浏览:690
3060ti以太坊一天多少钱 发布:2025-06-22 15:14:40 浏览:961
数贸区块链技术 发布:2025-06-22 15:09:28 浏览:615
区块链分布式账单 发布:2025-06-22 15:01:12 浏览:543
蔚来1000t算力 发布:2025-06-22 14:54:04 浏览:480
元宇宙会成功吗 发布:2025-06-22 14:50:20 浏览:193